我有一个包含一组信息的文件,如下所示:
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