替换匹配字符串 sed 中的两个单独的单词

替换匹配字符串 sed 中的两个单独的单词

考虑以下输入字符串。

PLOG_NFET_SLVT nf=3 ng=1 nl=20n

输出

PLOG_NFET_LVT nf=3 ng=1 nl=14n

注意:第一个和最后一个单词被替换。数据之间也存在差异。所以我不能有一个恒定的模式。我尝试使用下面的命令。

sed -i 's/PLOG.*FET_SLVT.*nl=20n/PLOG.*FET_LVT.*nl=14n/g' file

输出是:

PLOG.*FET_LVT.*nl=14n

有什么帮助吗?

答案1

您可以在搜索模式中使用捕获组并将反向引用(\1\2)添加到替换模式:

sed 's/PLOG_\([A-Z]\)FET_SLVT \(.*\) nl=20n/PLOG_\1FET_LVT \2 nl=14n/'

答案2

尝试这个,

 sed -i 's/^PLOG_NFET_SLVT/PLOG_NFET_LVT/g;s/20n$/14n/g' file
  • 寻找模式开始PLOG_NFET_SLVT并替换为PLOG_NFET_LVT
  • 并搜索模式结束20n并替换为14n

答案3

尝试这个:

sed 's/SLVT/LVT/;s/20n/14n/'

例子

$ echo "PLOG_NFET_SLVT nf=3 ng=1 nl=20n" | sed 's/SLVT/LVT/;s/20n/14n/'
PLOG_NFET_LVT nf=3 ng=1 nl=14n

相关内容