假设你想替换句子的一部分,而让其他部分用正则表达式 (regex) 来表示未变。例如,这是一个文本文件
文本1.txt
A Egg
b Egg
C Egg
D Egg
E Pig
您想将其更改为
A Chick
b Egg
C Chick
D Chick
E Pig
在这种情况下,Egg
每行中的任意大写字母、空格和Egg
都变成了Chick
。在正则表达式中,目标模式可以用来表示[A-Z] Egg
。
如何用☆ Chick
☆ 替换原始大写字母?下面的命令不起作用/不应该起作用,但希望它能帮助您理解我想要什么...
sed -i "s/[A-Z] Egg/[A-Z] Chick/g" ./text*.txt # incorrect
答案1
使用保留第一个大写字母的捕获组:
sed "s/\([A-Z]\) Egg/\1 Chick/" file.txt
A Chick
b Egg
C Chick
D Chick
E Pig
在哪里:
\([A-Z]\)
是包含第一个大写字母的捕获组 1\1
是对组 1 的反向引用(即组 1 的内容)
我已经删除了-i
显示结果的选项,如果您想就地替换,请使用它。
如果要在所有文件中进行就地替换text*.txt
:
sed -i "s/\([A-Z]\) Egg/\1 Chick/" text*.txt