如何从命令行更新多个文件上的字符串? [重复]

问题描述 投票:0回答:1

我想从命令行(bash)更新多个文本文件中的字符串。

bash sed gnu
1个回答
-1
投票

要将字符串更新为“John”,仅包含搜索到的字符串“Peter”的脚本文本文件(*.sh)并首先进行备份(.bak):

¡请勿使用! $ sed -i.bak 's/Peter/John/g' $(find bin/ -type f -name '*.sh' -exec grep -l Peter {} +)

经过研究,我找到了这个解决方案(如果您只想更改单词,则用于字数限制):

$ STRING_OLD="\bPeter\b"; STRING_NEW="John"; find bin/ -type f -name '*.sh' -not -name "*.bak" -print0 | xargs -0 grep -Zl "$STRING_OLD" | xargs -t -0 sed -i.bak 's/'"$STRING_OLD"'/'"$STRING_NEW"'/g'

它适用于带有空格、制表符、换行符和非 ASCII 字符的文件名/目录。

变量 STRING_OLD 是 sed s/regexp/replacement/ 命令的正则表达式。你一定要意识到这一点。

您还会看到文件已更改,并且仅更改找到 STRING_OLD 正则表达式的文件。

© www.soinside.com 2019 - 2024. All rights reserved.