将字符串替换为另一个字符串,反之亦然

将字符串替换为另一个字符串,反之亦然

我有一个如下所示的文件夹结构:

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

现在我想替换GeorgeDebojyotiDebojyotiGeorge

任何 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'

相关内容