使用 tac 逐字反轉文件

使用 tac 逐字反轉文件

我想使用 來tac逐個字元地反轉文字檔案。在 coreutils 的資訊頁面上,我發現一個範例:#Reverse a file character by charactertac -r -s 'x\|[^x]'

然而,運行tac -r -s似乎打開標準輸入而不是列印文件。是什麼'x\|[^x]'意思以及我該做什麼?

tac [file]我還注意到和的輸出tac -r [file]是相同的,並且它們與 相同cat [file]。仍然無法弄清楚逐個字元的反轉。

答案1

若要使用 逐一反轉文件tac,請使用:

tac -r -s 'x\|[^x]'

這記錄在info tac

# Reverse a file character by character.
tac -r -s 'x\|[^x]'

-r導致分隔符號被視為正規表示式-s SEP用作SEP分隔符x\|[^x]是一個符合每個字元的正規表示式(那些是x,那些不是x)。

$ cat testfile
abc
def
ghi
$ tac -r -s 'x\|[^x]' testfile

ihg
fed
cba%
$

tac file與 except 不同,cat fileunlessfile只有一行。tac -r file相同,tac file因為預設分隔符號是\n,當被視為正規表示式時和不被視為相同時。

答案2

如果您不關心低頻字符rev(請參閱 mosvy 的評論),那麼使用它比在需要時tac -r -s 'x\|[^x]'通過管道傳輸要高效得多。tac

$ cat testfile
abc
def
ghi
$ rev testfile
cba
fed
ihg
$ rev testfile|tac
ihg
fed
cba

這個解決方案比正規表示式便宜得多,tac -r -s 'x\|[^x]'因為正規表示式往往會顯著降低速度。

相關內容