erc*_*rch 4 utilities coreutils text-processing
说我有这个文件,只包含
a
b
c
b
a
Run Code Online (Sandbox Code Playgroud)
使用tac --separator=a file
在BASH [在基于Debian的Linux],我得到这样的:
# empty line
# empty line
b
c
b
aacommand@prompt # two a just before the prompt
Run Code Online (Sandbox Code Playgroud)
问题:据我所知,--separator=a
定义a
标志着字符串内部的中断,而不是newline
. 这是正确的吗?
我已经用其他字符串尝试了更多的输入,结果却一团糟。其他选项都工作得很好,我想:如果我使用tac --before
我首先得到大约五个而不是一个空行,但是这就是应该发生的事情,对吧?
tac
在它主要设计用于的情况下更容易理解,即当分隔符是记录终止符时,即分隔符出现在最后一条记录之后。它以相反的顺序打印记录(包括每个终止符)。
$ echo -n fooabara | tac -s a; echo
rabafooa
Run Code Online (Sandbox Code Playgroud)
输入由三个记录(foo
,b
和r
)组成,每条记录后跟分隔符a
;输出由三个记录(r
、b
和foo
)组成,每条记录后跟分隔符a
。
如果最后一条记录没有以记录终止符结尾,它仍然首先打印,没有记录分隔符。
$ echo -n fooabar | tac -s a; echo
rbafooa
Run Code Online (Sandbox Code Playgroud)
最后一条记录r
与倒数第二条记录连接在一起,b
中间没有分隔符,因为最后一条记录的末尾没有分隔符。
由于换行符,您的输入看起来有点混乱。让我们用逗号而不是换行符来看看它:
$ echo -n a,b,c,b,a, | tac -s a; echo
,,b,c,b,aa
Run Code Online (Sandbox Code Playgroud)
有三个输入记录:一个空的(有一个终止符a
),一个大的,,b,c,b,
(同样有一个终止符)和一个未,
终止的记录。这些记录(每条记录都带有终止符,最后一条没有终止符的记录除外)以相反的顺序打印。
您的困惑可能来自期望“分隔符”是分隔符——但这是用词不当:它实际上是一个记录终止符。--before
使其成为发起者。