Bash
Bash:如何在 .bashrc 中為帶參數的 awk 創建別名
我正在嘗試在 .bashrc 文件中添加別名,如下所示:
... alias cutf="_cutf" ... _cutf() { awk 'NR >= $2 && NR <= $3 { print }' < $1 }
(該函式的目標是顯示編號在之間的行的內容 $ 2 and $ 3 用於 $1 文件)
當我在新的 bash 會話中呼叫 cutf 時,我沒有得到任何輸出。
我錯過了什麼嗎?
$ 2 and $ 3 是單引號。Shell 不會用單引號擴展變數,因此它們會被
awk
. 切換到雙引號:awk "NR >= $2 && NR <= $3 { print }" < "$1"
請注意,您可以使用
sed -n 'X,Yp' file
其中 X 和 Y 是行號,或者在 Perl 中類似
perl -ne 'print if X .. Y' file
它們都很短,您可能不需要它們的功能。
您不應該讓 shell 擴展您的 awk 語句中的變數。變數如 $ 2 and $ 3 在 awk 中有特殊的含義。
_cutf() { awk -v start="$2" -v stop="$3" 'NR >= start && NR <= stop { print }' "$1" }
或者你可以這樣寫
_cutf() { awk 'NR >= start && NR <= stop { print }' start="$2" stop="$3" "$1" }