假設下面的命令sed:爲什麼命令q添加一個新行?
echo -en "abc1\ndef2\nghi1" | sed -n 'p; d;'
在這種情況下,輸出是一樣的,因爲這將是沒有SED的。所以最後一行仍然沒有換行符。下一個命令
echo -en "abc1\ndef2\nghi1" | sed -n '$! {p; d;}; /1$/ {s/1$//; p; d;}'
sed打印除最後一行外的所有內容,但未進行修改。最後一行縮短了一個字符。最後一行仍然沒有換行符。下一個命令
echo -en "abc1\ndef2\nghi1" | sed -n '$! {p; d;}; /1$/ {s/1$//; p; q1;}'
(「d」通過在最後的命令塊「Q1」所取代。輸出結果相同之前,但此時存在的最後一行的附加新行字符。
- 爲什麼?
- 如何解決
(對於那些誰感興趣的意向這個命令:給定一個特定的標準輸入,我要掃描的最後一個字符,對STDIN傳遞給STDOUT沒有這個拉斯t字符並根據該字符設置退出代碼。不應該有其他修改。 SED似乎是完美的,如果就不會有這個問題,換行
sed -n '
$! {p; d;}; #print any non last line, do next cycle
/0$/ {s/0$//; p; d}; #last line ending with 0? Remove 0, print, next cycle
/1$/ {s/1$//; p; d}; #last line ending with 1? Remove 1, print, next cycle
{p} #fall back, print last line
'
到目前爲止,這個腳本運行完美關於向新行的問題。沒有添加新行。現在,如果我用「Q」
sed -n '
$! {p; d;}; #print any non last line, do next cycle
/0$/ {s/0$//; p; q0}; #last line ending with 0? Remove 0, print, exit 0
/1$/ {s/1$//; p; q1}; #last line ending with 1? Remove 1, print, exit 1
{p} #fall back, print last line
'
換行符問題突然出現......
其他的解決方案,歡迎替換「d」命令,就應該儘可能地快。
'q' cmd是否真的接受一個可選的整數參數還是隻是忽略它?如果將'q1'改爲'q',會發生什麼?很好的說明問題,祝你好運得到答案! – shellter
是的,它接受一個可選的整數。該整數用作退出代碼。但是一些手冊沒有說明這一點。 「q」只是「q0」的簡寫。 – Henning