在许多子文件夹中的各种文件中,我在大文本文件中包含以下文本,每个文本都是唯一的
Linux.Secret = 'XYZZYXZYXZYXZYXZYXZ'
我想让它全部都Linux.Secret = ''
一样Linux.Secret = 'NEWSECRET'
我怎样才能做到这一点?
答案1
Linux.Secret =
首先查找行首包含以下内容的所有文件:
find . -type f -exec grep -q '^Linux.Secret =' {} ';'
请注意,grep -q
不会输出任何内容,它只是以状态退出,具体取决于表达式是否可以匹配。
然后,对于通过这些测试的所有文件(是常规文件并包含该文本),我们运行一个简单的 (GNU)sed
命令:
find . -type f -exec grep -q '^Linux.Secret =' {} ';' \
-exec sed -i "s/^Linux.Secret =.*/Linux.Secret = 'NewSecret'/" {} +
通过用我们想要的行替换整行,可以在文件中就地进行更改。我们通过在需要它的表达式周围使用双引号来处理单引号。
如果您需要更加小心匹配,并且仅匹配Linux.Secrets =
后跟单引号中的内容:
find . -type f -exec grep -E -q "^Linux.Secret = '[^']+'" {} ';' \
-exec sed -E -i "s/^Linux.Secret = '[^']+'.*/Linux.Secret = 'NEWSECRET'/" {} +
有关的: