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

相关内容