如何使用 sed regex 替换彼此相关的单词以及它们之间的一个字符

如何使用 sed regex 替换彼此相关的单词以及它们之间的一个字符

如何使用 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

相关内容