
다음과 같은 명령을 어떻게 보나요?
awk 'NR%2==0 {printf "%s %8.0f", $1, $5}' filename.txt
"watch"를 앞에 붙이면 다음 오류가 발생합니다.
awk: cmd. line:1: fatal: cannot open file `{printf' for reading (No such file or directory)
다음에 대한 답변:따옴표가 포함된 인수와 함께 watch 명령 사용$ 기호를 \$로 바꿔서 이스케이프 처리하는 것이었습니다. 하지만 그러면 오류가 발생합니다.
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0:
해당 질문에 대한 댓글로 이에 대해 질문하고 싶었지만 댓글을 달 만큼 포인트가 부족했습니다.
이 경우에는 효과가 있었던 답변이 효과가 없었던 유사한 질문:
1)https://askubuntu.com/questions/500217/how-to-properly-quote-piped-command-for-watch(대답은 다시 $ 기호를 이스케이프하는 것이었습니다).
2), 3), 4)는 평판이 10점이 아니면 링크를 2개 이상 게시할 수 없기 때문에 댓글에 기재되어 있습니다.
답변1
네 가지 접근 방식이 있습니다.
1. 명령을 큰따옴표로 묶습니다.
큰따옴표와 달러 기호를 모두 이스케이프해야 합니다.
watch "awk 'NR%2==0 {printf \"%s %8.0f\", \$1, \$5}'" filename.txt
2. 명령을 작은따옴표로 묶습니다.
작은따옴표 안에는 이스케이프할 필요도 없고 필요 "
도 없습니다 . $
그러나 작은따옴표로 묶인 문자열 안에 작은따옴표를 포함하는 것은 불가능합니다. 작은따옴표를 표시해야 하는 경우 해결 방법은 작은따옴표로 묶인 문자열을 끝내고 이스케이프된 작은따옴표 를 추가하는 것입니다 \'
. 다음과 같습니다:
watch 'awk '\''NR%2==0 {printf "%s %8.0f", $1, $5}'\' filename.txt
3. 하이브리드 접근 방식
위의 두 가지를 결합하여 문자열의 첫 번째 부분을 큰따옴표로 묶고 두 번째 부분을 작은따옴표로 묶습니다.
watch "awk 'NR%2==0 {printf "'"%s %8.0f", $1, $5}'\' filename.txt
4. 인용되지 않았지만 완전히 이스케이프되었습니다.
명령을 따옴표로 묶지 않으면 필요한 모든 쉘 활성 문자를 이스케이프해야 합니다. 여기에는 공백, 따옴표, 중괄호 및 달러 기호가 포함됩니다.
watch awk\ \'NR%2==0 \{printf\ \"%s\ %8.0f\",\ \$1,\ \$5\}\' filename.txt
답변2
이것은 오래된 스레드이지만 이 문제는 결코 사라지지 않을 것입니다. 여기 awk 문자 ', $ 및 %를 이스케이프 처리합니다.
$ watch -d -n 10 'ls -ltr | grep exec_setsid_ | grep out | tail -1 | awk '\'{ print \$9 }\'' | xargs tail -25'
이 명령은 현재 폴더에 생성된 최신 "exec_sedsid_*.out" 파일의 마지막 25줄을 표시합니다!
조속히!