Bash
如何刪除 bash 中的尾隨換行符?
我正在尋找行為類似於 Perl 的東西
chomp
。我正在尋找一個簡單地列印其輸入的命令,如果它是換行符則減去最後一個字元:$ printf "one\ntwo\n" | COMMAND_IM_LOOKING_FOR ; echo " done" one two done $ printf "one\ntwo" | COMMAND_IM_LOOKING_FOR ; echo " done" one two done
(Bash 和 Zsh 中的命令替換會刪除所有尾隨新行,但我正在尋找最多刪除一個尾隨新行的東西。)
這應該有效:
printf "one\ntwo\n" | awk 'NR>1{print PREV} {PREV=$0} END{printf("%s",$0)}' ; echo " done"
該腳本始終列印前一行而不是目前行,並且最後一行的處理方式不同。
它更詳細地做了什麼:
NR>1{print PREV}
列印上一行(第一次除外)。{PREV=$0}
將目前行儲存在PREV
變數中。END{printf("%s",$0)}
最後,列印最後一行而不換行。另請注意,這將在末尾最多刪除一個空行(不支持刪除
"one\ntwo\n\n\n"
)。
您可以
perl
不使用chomp
:$ printf "one\ntwo\n" | perl -0 -pe 's/\n\Z//'; echo " done" one two done $ printf "one\ntwo" | perl -0 -pe 's/\n\Z//'; echo " done" one two done
但是為什麼不使用
chomp
它自己:$ printf "one\ntwo\n" | perl -pe 'chomp if eof'; echo " done"