了解sed

时间:2014-08-11 23:55:17

标签: linux bash sed man info

我想了解如何

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

工作,这些是什么意思。我阅读的手册页让我更加困惑,我尝试了信息,但我不知道如何工作!我对Linux很陌生。 Debian是我的第一个发行版,但它似乎是一个相当合乎逻辑的起点,因为它是许多其他发行版的根本并且已经存在了一段时间,所以可能正在做好事并且相当标准化。如果需要,我正在运行Wheezy 64位作为fyi。

1 个答案:

答案 0 :(得分:2)

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

sed的一般语法是

sed [OPTIONS] COMMAND FILE

在你给出的shell命令中:

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

sed命令为s/\^\[/\o33/g;s/\[1G\[/\[27G\[/'/var/log/boot为文件。

给定的sed命令实际上是两个单独的命令:

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

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

  3. #1(s(替换)命令的意图是将所有出现的'^['替换为八进制值033ESC字符) 。但是,此sed命令中存在错误。转义的八进制代码的正确bash语法是\nnn,因此编写此sed命令的正确方法是:

    s/\^\[/\033/g

    注意替换字符串之后的尾随g?这意味着执行全局替换;没有它,只会改变第一次出现。

    #2的目的是用\[1G\[替换所有出现的字符串\[27G\[。但是,此命令也有错误:需要尾随g才能导致全局替换。所以,第二个命令需要这样写:

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

    最后,将所有这些放在一起,两个sed命令应用于/var/log/boot文件的内容,其中输出已将所有出现的^[转换为{{1} }},字符串\033已转换为\[1G\[