linux - 你能解释一下这个 sed 单行代码吗?

标签 linux unix sed

下面一行反序打印出文件内容

$ 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 spacehold space等价于变量$input$hold(分别) 在这个例子中。

关于linux - 你能解释一下这个 sed 单行代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9933825/

相关文章:

linux - 未传递的待处理信号

ruby-on-rails - 如何在 Amazon Linux 上将 selenium 与 chrome 驱动程序一起使用。错误:Selenium::WebDriver::Error::UnknownError:未知错误:找不到 Chrome 二进制文件

perl - 在单次迭代中提取同一模式第一次出现和最后一次出现之间的所有内容

linux - 连接 linux 程序输出,并只返回那些重复的

regex - 如何删除给定行中后跟点(.)的数字

linux - Bash、变量和转义符号

linux - 使用无序多部分键对文件进行排序

linux - 计算具有多列数据的文本文件的中值和平均值

linux - 或者 Sed 中的条件

linux - sed 解码 html 编码。需要解释如何