1

それで、私はこれに対する答えを探しました、そして実際にいくつか見つけましたが、どれもうまくいかないようです...

変更が必要な 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\ を検索していますが、これは私が望んでいるものではありません... 何か考えはありますか? ご協力いただければ幸いです。

ありがとう!

4

1 に答える 1

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
于 2013-02-12T21:06:36.983 に答える