Text-Processing
tac 命令的選項會產生奇怪的輸出comprehensionquestionC這米pr和H和ns一世這nq你和s噸一世這ncomprehension question
假設我有這個文件,除了
a b c b a
tac --separator=a file
在 BASH 中使用$$ on a Debian based Linux $$,我明白了:
# empty line # empty line b c b aacommand@prompt # two a just before the prompt
問題:據我了解,
--separator=a
定義a
標記字元串內的中斷,而不是newline
. 這是正確的嗎?我已經嘗試過使用其他字元串進行更多輸入,但結果非常混亂。其他選項都工作得很好,我想:如果我使用
tac --before
我首先得到大約 5 比 1 的空行,但這就是應該發生的事情,對吧?
tac
在它主要設計的情況下更容易理解,即分隔符是記錄終止符,即分隔符出現在最後一條記錄之後。它以相反的順序列印記錄(包括每個終止符)。$ echo -n fooabara | tac -s a; echo rabafooa
輸入由三個記錄(
foo
和b
)組成r
,每個記錄後跟分隔符a
;輸出由三個記錄(r
和b
)組成foo
,每個記錄後跟分隔符a
。如果最後一條記錄沒有以記錄終止符結尾,它仍然首先列印,沒有記錄分隔符。
$ echo -n fooabar | tac -s a; echo rbafooa
最後一條記錄與倒數第二
r
條記錄連接在一起,b
中間沒有分隔符,因為最後一條記錄的末尾沒有分隔符。由於換行符,您的輸入看起來有點混亂。讓我們用逗號而不是換行符來查看它:
$ echo -n a,b,c,b,a, | tac -s a; echo ,,b,c,b,aa
有三個輸入記錄:一個空的(帶有一個終止符
a
),一個龐大的,,b,c,b,
(同樣帶有一個終止符),和一個未終止,
的結尾。這些記錄(每個記錄都有其終結符,除了沒有終結符的最後一條記錄)以相反的順序列印。您的困惑可能來自於期望“分隔符”是分隔符——但這是用詞不當:它實際上是一個記錄終結者。
--before
而是讓它成為發起者。