
我想使用 來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]'
# 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 file
unlessfile
只有一行。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]'
因為正規表示式往往會顯著降低速度。