명령은 대화형 셸에서 작동하지만 스크립트 내에서는 작동하지 않습니다.

명령은 대화형 셸에서 작동하지만 스크립트 내에서는 작동하지 않습니다.

crn.txt다음 텍스트가 포함된 텍스트 파일이 있습니다.

9 1 * * 3,6 /opt/testtingtools/kos/bin/cos.sh
55 23 * * * /opt/testtingtools/tqdaily.sh 2>>/opt/toolcheck/extract.err
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1

출력이 다음과 같이 표시되도록 단어 testtingtools및 업데이트가 포함된 줄을 삭제해야 합니다.crn.txt

50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1

나는 명령을 사용하고 있습니다

sed '/testtingtools/d' crn.txt 2>&1 | tee crn.txt

Bash나 명령줄에서 실행할 수 있지만 스크립트 내에서는 실행할 수 없습니다. 저는 유닉스 서버(sunSolaris)를 사용하고 있습니다.

Linux에서는 실행할 수 있지만 Unix에서는 실행할 수 없는 명령도 있습니다.

echo "$(sed '/testtingtools/d' crn.txt)" > crn.txt

"작동하지 않음"은 특정 줄을 삭제하지 않는다는 의미이며, 스크립트 내부의 코드를 사용하면 전체 파일이 지워집니다. 하지만 명령줄에서 코드를 사용하면 crn.txt.

답변1

Solaris에서는 sed내부 편집이 불가능합니다 .

Linux에서는 다음을 사용할 수 있습니다.

sed -i '/testtingtools/d' crn.txt

Solaris 및 Linux에서 실행할 수 있는 이식 가능한 방법은 다음과 같습니다.

cp crn.txt crn.tmp
sed '/testtingtools/d' <crn.tmp >crn.txt &&
rm crn.tmp

발생할 수 있는 문제는 tee파일을 읽을 수 있기 전에 파일이 잘려서 빈 파일이 되는 것입니다. sed파이프라인의 명령은 동시에 실행됩니다.

일반적으로 동일한 명령에서 잘린 파일을 읽는 것을 피하고 대신 임시 파일을 사용하는 것이 좋습니다. 이것이 sed -i뒤에서 일어나는 일입니다.

다른 명령과 유사합니다.

echo "$(sed '/testtingtools/d' crn.txt)" > crn.txt

다음과 같이 쓰는 것이 가장 좋습니다.

sed '/testtingtools/d' crn.txt >crn.txt

이것첫 번째모든 표준 셸(Linux 및 Solaris)에서 발생하는 현상은 셸이 리디렉션을 확인하고 출력 파일을 0 크기로 자르는 것입니다. 그 다음에이 명령 은 sedLinux와 Solaris 모두에서 예상대로 작동하지 않습니다(즉, 원본 파일을 편집하려는 경우).

답변2

We can do it both sed and awk

awk 메서드

awk '!/testtingtools/{print $0}' crn.txt >l.txt &&yes| mv l.txt crn.txt

산출

 cat crn.txt
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1

관련 정보