如何使用 sed 正则表达式 替换彼此相关的单词以及它们之间的一个字符,而不改变字符和两个单词作为一组
ahmed#mohamed
ahmed$mohamed
ahmed7mohamed
我不想ahmed
只替换然后mohamed
只替换
我用了
sed -i 's/ahmed.mohamed/mohamed.ahmed/g'
但让一切都像这样,我想保留他们之间的性格。
mohamed.ahmed
mohamed.ahmed
mohamed.ahmed
答案1
你们非常接近。您需要使用捕获括号:
sed -E -i 's/ahmed(.)mohamed/mohamed\1ahmed/g'
将\1
替换为 的文本第一的一组括号。
答案2
您想要交换两个由某个字符分隔的ahmed
字符串。mohamed
你表达的问题,
s/ahmed.mohamed/mohamed.ahmed/
是单词之间的字符总是被点替换。解决方案是捕获该角色并将其替换为自身。
这是使用 执行此操作的一种方法sed
,它也使用相同的捕获机制来避免再次输入两个字符串进行替换:
sed 's/\(ahmed\)\(.\)\(mohamed\)/\3\2\1/'
或者,
sed -E 's/(ahmed)(.)(mohamed)/\3\2\1/'
对给定数据进行测试:
$ sed -E 's/(ahmed)(.)(mohamed)/\3\2\1/' <file
mohamed#ahmed
mohamed$ahmed
mohamed7ahmed