使用SED替换模式会导致出现额外的字符

时间:2012-03-18 09:46:32

标签: regex bash sed

我有一个文件,想要用另一个字符串替换模式。

#PBS -N bench1-M1-plt2-size15
#PBS -o /home/results/bench1-M1-plt2-size15.out
./run -d ./results/ --config=bench1-M1-plt2-size15.conf \ 
--results=bench1-M1-plt2-size15.res config/myConfig.txt -F 2000000 

我使用此命令

sed 's/M1-[^-]*-[^-]/M1-plt32-size10/g' filename

但输出文件如下所示:

#PBS -N M1-plt32-size100
#PBS -o /home/mahmood/gem5/results/M1-plt32-size100.out
./run -d ./results/ --config=bench1-M1-plt32-size100.conf \
--results=bench1-M1-plt32-size100.res config/myConfig.txt -F 2000000 

请注意“size10”后面加一个'0'字符。如您所见,在SED命令中,size设置为10,但输出文件为“size100”

问题是什么?我该如何解决?

1 个答案:

答案 0 :(得分:3)

你的正则表达式不正确。您有[^-],它只匹配1个非连字符。我相信这就是你的意图:

sed 's/M1-[^-]*-[^\.]*/M1-plt32-size10/' filename

<强>输出:

#PBS -N bench1-M1-plt32-size10
#PBS -o /home/results/bench1-M1-plt32-size10.out
./run -d ./results/ --config=bench1-M1-plt32-size10.conf \ 
--results=bench1-M1-plt32-size10.res config/myConfig.txt -F 2000000