使用sed匹配精确变量

时间:2015-07-14 22:58:07

标签: regex bash sed

我正在使用一个shell脚本,它利用sed查找并用另一个变量替换一个变量。在脚本中,我将变量设置为唯一目录:

"sub1=$INPUTPATH\sub1.nii.gz"
...
"sub53=$INPUTPATH\sub53.nii.gz"

然后,shell脚本调用模板(设计用于另一个程序),其中特定变量的所有实例(即占位符标签)都替换为指定的变量。例如:

for i in $TEMPLATE; do
sed -e 's@OUTPUT@'$OUTPUT'@g'\
 -e 's@sub1@'$sub1'@g'\
 -e 's@sub2@'$sub2'@g'\
...
 -e 's@sub53@'$sub53'@g'\

此代码似乎工作得很满意,直到我达到两位数,例如,“sub1”替换“sub10”,“sub11”,“sub12”等,并将第二个数字添加到指定路径的末尾。

sub10=$INPUTPATH\sub1.nii.gz0
sub11=$INPUTPATH\sub1.nii.gz1
sub12=$INPUTPATH\sub1.nii.gz2

我认为此错误是由于代码未指定“完全匹配”。我已经尝试过迭代来纠正这个无济于事(例如,sed replace exact match)。任何帮助是极大的赞赏!谢谢!

1 个答案:

答案 0 :(得分:1)

Etan Reisner' recommendation解决了我的问题!示例语法如下:

 -e 's@\bsub1\b@'$sub1'@g'\
 -e 's@\bsub2\b@'$sub2'@g'\
 -e 's@\bsub3\b@'$sub3'@g'\