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각 줄에 하나의 단어, 공백, /와일드카드 또는 정규식 연산자가 포함되어 있지 않다고 가정합니다.

관련 정보