
你如何看待這樣的命令?
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. 未引用但完全轉義
如果我們不將命令括在引號中,則需要轉義所有需要的 shell 活動字元。其中包括空格、引號、大括號和美元符號:
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 行!
快點!