如何使用适当的正则表达式在 sed 中查找模式?

如何使用适当的正则表达式在 sed 中查找模式?

我有一个包含一组信息的文件,如下所示:

cat filename
    1   S121
    2   M121
    3   MS121
    4   SM154
    5   SM91 

我试图只改变所有那些[mM] to MS保持相同模式的东西。sed script已尝试以下方法

sed -r 's/ms?([0-9])/MS\1/Ig' filename

但它不仅仅特定于 [mM],并且可以更改第 4 行和第 5 行,如下所示:

4       SMS154
5       SMS91

任何帮助表示赞赏。 tnx!

答案1

您正在匹配一个子字符串,从“米”,可选地其次是“s”,然后跟一个数字[0-9]

第 4,5 行的文本也包含此子字符串:

4SM154

5SM91

所以他们被替换了。

尝试为您的模式添加前缀“\s”表明您只对第 2 列的前缀感兴趣,如下所示:

sed -r 's/(\s)ms?([0-9])/\1XX\2/Ig'

答案2

这个怎么样 ?你的问题正确吗?

sed -r 's/m([^s])/MS\1/Ig' file

相关内容