-b,--之前
分隔符附加到文件中它之前的记录的开头。
而且我无法理解以下输出:
$ echo -e "Hello\nNew\nWorld\n!" > file
$ tac file
!
World
New
Hello
$ tac -b file
!
World
NewHello
New
为什么and之间没有换行符Hello
?
-b,--之前
分隔符附加到文件中它之前的记录的开头。
而且我无法理解以下输出:
$ echo -e "Hello\nNew\nWorld\n!" > file
$ tac file
!
World
New
Hello
$ tac -b file
!
World
NewHello
New
为什么and之间没有换行符Hello
?
tac
与记录及其分隔符一起使用,默认情况下附加在相应记录之后。与分离分隔符的其他基于记录的工具(例如 AWK)相比,这有点违反直觉。使用
-b
,附有换行符的记录如下(按原始顺序):Hello
\nNew
\nWorld
\n!
\n
反向输出,这就变成了
这对应于您看到的输出。
没有
-b
,带有换行符的记录如下:Hello\n
New\n
World\n
!\n
反向输出,这就变成了
对我来说,这确实看起来很奇怪,部分原因
tac
是有点违反直觉。让我们使用清晰可见的分隔符——逗号。作为以下命令的结果,我希望看到什么:
?
好吧,我认为这是因为 A 与 B 与 C 分开。因此(我得出结论)被反向打印,它们应该构成
C,B,A
. 让我们检查。唉,它的打印方式不同:我们可以总结
tac
出原始分隔符放置的棒:A
之后仍然有它,也有B
,但C
没有它,因此它按原样打印。如果我
tac
用-b
这个时间跑会发生什么?看起来它的工作方式是这样的
-b
:它反向遍历输入,直到找到一个分隔符。发现它已打印:,
. 然后它打印搜索时跳过的文本:C
. 然后循环重复:,B
. 由于没有分隔符,因此只打印剩余部分:A
.根据我上面给出的解释,
New
它将在一个新行上,因为它以 new-line 为前缀,但因为Hello
不是 - 它会按原样打印。