下面一行反序打印出文件内容
$ sed -n '1!G;h;$p' test.txt
sed逐行读取文件怎么可能?能解释一下吗
n
标志1!
G
h
- 和
$p
在这个命令中?
最佳答案
这将完成与 tac
相同的工作,即恢复行的顺序。
将sed脚本重写为伪代码,意思是:
$line_number = 1;
foreach ($input in $input_lines) {
// current input line is in $input
if ($line_number != 1) // 1!
$input = $input + '\n' + $hold; // G
$hold = $input; // h
$line_number++
}
print $input; // $p
如您所见,sed 语言非常具有表现力 :-) 1!
和 $
是所谓的地址,它设置了命令应该运行的条件. 1!
表示不在第一行,$
表示在末尾。 Sed 有一个辅助存储寄存器,称为hold space
。
有关更多信息,请在 linux 控制台上键入 info sed
(这是最好的文档)。
-n
禁用循环本身中的默认 print $input
命令。
术语pattern space
和hold space
等价于变量$input
和$hold
(分别) 在这个例子中。
关于linux - 你能解释一下这个 sed 单行代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9933825/