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

或者使用具有更清晰/更好/更简单语法的 shell,例如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每行包含一个单词,没有空格,没有/,没有通配符或正则表达式运算符......

相关内容