0

我试图了解如何

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

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

4

1 回答 1

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\[/

#1 s(替代)命令的目的是将所有出现的 替换为(字符)'^['的八进制值。但是,这个命令有一个错误。转义八进制代码的正确 bash 语法是,因此编写此命令的正确方法是:033ESCsed\nnnsed

s/\^\[/\033/g

注意g替换字符串后的尾随?表示进行全局替换;没有它,只有第一次出现会被改变。

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

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

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

于 2014-08-12T00:40:47.180 回答