【问题标题】:Using sed to match exact variable使用 sed 匹配精确变量
【发布时间】: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 似乎已经解决了这个问题。

标签: regex bash sed


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 2022-07-01
    相关资源
    最近更新 更多