加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 你能解释一下这个sed one-liner吗?

发布时间:2020-12-14 01:27:49 所属栏目:Linux 来源:网络整理
导读:以下一个班轮反过来打印出文件的内容 $sed -n '1!G;h;$p' test.txt 当sed逐行读取文件时怎么可能?你能解释一下这个意思吗? n旗帜 1! G. h 和$p 在这个命令? 解决方法 这将与tac完成相同的工作,即恢复行的顺序. 将sed脚本重写为伪代码,意味着: $line_num
以下一个班轮反过来打印出文件的内容

$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有一个辅助存储器寄存器,称为保持空间.

有关更多信息,请在linux控制台上输入sed(这是最好的文档).

-n在循环本身中禁用默认的print $input命令.

在这个例子中,术语模式空间和保持空间是变量$input和$hold(分别)的等价物.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读