tcsh foreach ループ内の sed [閉じる]

tcsh foreach ループ内の sed [閉じる]
> foreach i ( `cat /home/chandran/scratch_r/review/1810a042/list2test` )
foreach? sed -i "/^$i /s/$/ ASAN ASAN_CUI/" testify.list
foreach? end
Illegal variable name.

答え1

> echo "$/"
Illegal variable name.
> echo '$/'
$/
> set i=blah
> echo "$i"'$/'
blah$/
> echo $i:q'$/'
blah$/

だから:

sed -i '/^'$i:q' /s/$/ ASAN ASAN_CUI/' testify.list

または、次のように、よりきれいで/より良い/簡単な構文を使用するシェルを使用してくださいzsh

zsh% for i ($(< ~/scratch_r/review/1810a042/list2test))
for>   sed -i "/^$i /s/$/ ASAN ASAN_CUI/" testify.list

testify.listただし、ここでは繰り返し書き換えるのではなく、一度だけ実行できます。

sed -i "$(
    sed 's|.*|/^& /s/$/ ASAN ASAN_CUI/|' ~/scratch_r/review/1810a042/list2test
  )" testify.list

または:

perl -lapi -e 'BEGIN{while (<STDIN>) {chomp; $w{$_}++}}
               $_ .= " ASAN ASAN_CUI" if $w{$F[0]}
              ' testify.list < ~/scratch_r/review/1810a042/list2test

(検証されていません)。

これらすべては、list2test各行に1つの単語、スペース、/ワイルドカード、または正規表現演算子が含まれていないと仮定します。

関連情報