我想使用 来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]'
因为正则表达式往往会显着降低速度。