我有一个如下所示的文件夹结构:
a/b/sample.txt
c/d/e/sample1.txt
样本和样本文件都包含句子My name is Debojyoti
e/f/sample2.txt
g/h/i/sample3.txt
Sample2 和 Sample3 文件都包含句子My name is George
现在我想替换George
为Debojyoti
和Debojyoti
George
任何 UNIX shell 脚本都可以执行此操作,而无需硬编码文件夹名称。
答案1
在 GNU 系统上,您可以执行以下操作:
grep -rlZ -e Debojyoti -e George . |
xargs -r0 sed -i '
s/Debojyoti/\n/g
s/George/Debojyoti/g
s/\n/George/g'
grep
列出至少包含两个以 NUL 分隔的字符串之一的文件。
xargs
将该列表传递给sed -i
就地编辑。
sed
一次处理一行文件。对于每一行,所有出现的 都Debojyoti
首先替换为换行符(否则保证不会出现在内容行),然后George
出现的内容将替换为Debojyoti
.然后换行符(原来是 s Debojyoti
)被替换为George
。
除了 GNU 之外sed
,您还可以使用perl
:
perl -pi -e 's/(G)eorge|Debojyoti/$1 ? "Debojyoti" : "George"/ge'