私はsed
で実行したい置換リストを持っています。置換を単一のsed
コマンドに組み合わせる代わりに、私は各置換をbashループの繰り返しで実行したいと思います。たとえば:次の反復へのbashループ反復の出力
cat ${input} |
for subst in "${substlist}"; do
sed 's/'${subst}'/modified_'${subst}'/g'
done > ${output}
私は、各反復は、全体の流れを変更しますが、私は最初の反復が入力を取得することを見ていることを期待します。
このパターンはbashでも可能ですか?
がところで、{substlist} '文字列を拡大して' $ - 一般言い換えれば、引用符で囲まれていない展開による単語分割に頼るのではなく、適切な配列を使用する必要があります。つまり、ベストプラクティスは 'substlist =("第1 ""第2 ""第3 ")です。 "$ {substlist [@]}"のsubstのために; do ... ... –
なぜあなたはそれらを1つの 'sed'コマンドに組み合わせたいのですか?それが答えのいくつかです。 – Barmar
ところで、あなたが一度に(つまり、同時に)異なる 'sed'プロセス(すべての奇妙な理由で)ですべての置換を実行したい場合、そのために最も適切な"ループ "の種類は再帰関数です。 'for'ループです。次に例を示します。 'multised(){case $#in 0)cat ;; 1)sed -e "$ 1" ;; *)ローカルcur = $ 1;シフト; sed -e "$ cur" | multised "$ @" ;;エサック; } ' - 配列に' substs'がある場合、 'multised '$ {substs [@]}" <"$input" > "$ output" 'として使用できます。 –