sed:用同一行中的另一个模式替换找到的模式

时间:2019-07-31 10:14:59

标签: unix sed

我有这样一行:

"LExx 01236723 LE12"

我想找到LE12并将LExx替换为LE12sed有可能吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

$ echo "LExx 01236723 LE12" | sed 's/LExx\(.*LE\(..\)$\)/LE\2\1/'
LE12 01236723 LE12

说明

s            # substitute
/LExx        # find LExx
\(.*         # save rest in arg1 (\1)
LE\(..\)$    # find LE and save next 2 char in arg2 (\2)
\)           # end arg1
/            
LE\2\1       # print LE + arg2 + arg1
/

答案 1 :(得分:0)

假设两个搜索字符串均为constants,然后使用带有正则表达式扩展名sed GNU bash(在\b下运行)(对于单词边界):

sed '/LE12/s/\bLExx\b/LE12/' <<< "LExx 01236723 LE12"

输出:

LE12 01236723 LE12