代码之家  ›  专栏  ›  技术社区  ›  Timothy Danielson

了解sed

  •  0
  • Timothy Danielson  · 技术社区  · 12 年前

    我想知道

    sed 's/\^\[/\o33/g;s/\[1G\[/\[27G\[/' /var/log/boot
    

    以及这些片段的含义。我读到的手册页让我更加困惑,我尝试了一下信息:“我不知道该怎么做!”!我对Linux很陌生。Debian是我的第一个发行版,但它似乎是一个相当合理的起点,因为它是许多其他发行版的根源,而且已经存在了一段时间,所以它可能做得很好,而且相当标准化。如果需要,我将运行Wheezy 64位作为fyi。

    1 回复  |  直到 12 年前
        1
  •  2
  •   aks    12 年前

    这个 sed 命令是 流编辑器 ,读取其文件(或STDIN)以进行输入,将命令应用于输入,并将结果(如果有)呈现给输出(STDOUT)。

    的通用语法 已安装的 是

    sed [OPTIONS] COMMAND FILE
    

    在您给出的shell命令中:

    sed 's/\^\[/\o33/g;s/\[1G\[/\[27G\[/' /var/log/boot

    这个 已安装的 命令是 s/\^\[/\o33/g;s/\[1G\[/\[27G\[/' 和 /var/log/boot 是文件。

    给定的 已安装的 命令实际上是两个独立的命令:

    1. s/\^\[/\o33/g

    2. s/\[1G\[/\[27G\[/

    #1的意图 s (substitute)命令,用于替换所有出现的 '^[' 八进制值为 033 ( ESC 字符)。然而,这有一个错误 已安装的 命令转义八进制代码的正确bash语法是 \nnn ,所以这是正确的方法 已安装的 要写入的命令是:

    s/\^\[/\033/g

    注意后面的 g 在替换字符串之后?它意味着执行 全球的 替换没有它,只会改变第一次出现。

    #2的目的是替换字符串的所有出现 \[1G\[ 具有 \[27G\[ 。然而,此命令也有一个错误:尾随 克 需要进行全局替换。因此,第二个命令需要这样写:

    s/\[1G\[/\[27G\[/g

    最后,把这一切放在一起 已安装的 命令应用于 /var/log/boot 文件,其中输出中出现了 ^[ 转换为 \033 和字符串 \[1G\[ 已转换为 \[27克\[ .