【发布时间】:2015-10-03 19:26:25
【问题描述】:
我正在使用一个 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)。任何帮助是极大的赞赏!谢谢!
【问题讨论】:
-
一个简单的解决方法是重新排序您的替换,以便在
sub1之前执行sub10。 -
在你的模式中使用word boundaries。
\b、\<和\>。 -
太棒了!太感谢了!使用 \b 似乎已经解决了这个问题。