所以,我一直在寻找答案,事实上我找到了一些,但似乎都没有...
我有一个文件夹,里面装满了我需要修改的bash脚本。具体来说,我需要更换行
INPUT=/data/scratch02/mpgussert/HAWC-30/${RUN}_reco
带
INPUT=/data/hawc01/hawcroot/data/hawc/reconstructed/quesadilla/${RUN}
我试过这个
perl -w -i -p -e "s'INPUT=/data/scratch02/mpgussert/HAWC-30/${RUN}_reco'INPUT=/data/hawc01/hawcroot/data/hawc/reconstructed/quesadilla/${RUN}'g" *.sh
执行时没有错误,但找不到并替换所需的文本。根据我的理解,使用'消除正则表达式应该搜索没有特殊字符替换。那是对的吗?如果是这样,任何想法为何失败?
我也试过
perl -w -i -p -e "s/INPUT=\/data\/scratch02\/mpgussert\/HAWC-30\/\$\{RUN\}_reco/INPUT=\/data\/hawc01\/hawcroot\/data\/hawc\/reconstructed\/quesadilla\/\$\{RUN\}/g" *.sh
反斜杠应忽略特殊字符替换,但这会返回以下错误。
Backslash found where operator expected at -e line 1, near "RUN\"
syntax error at -e line 1, near "RUN\"
Execution of -e aborted due to compilation errors.
所以它正在寻找RUN \,这不是我想要的......有什么想法吗?我很感激你能给予的任何帮助。
谢谢!
答案 0 :(得分:1)
您希望模式为...\$\{RUN\}...
,但这不是您传递的内容:
$ echo "...\$\{RUN\}..."
...$\{RUN\}...
您需要进行更多转义,或切换到单引号。
$ echo '...\$\{RUN\}...'
...\$\{RUN\}...
所有在一起:
perl -i -wpe'
s{INPUT=/data/scratch02/mpgussert/HAWC-30/\$\{RUN\}_reco}
{INPUT=/data/hawc01/hawcroot/data/hawc/reconstructed/quesadilla/\${RUN}}g
' *.sh