我试图了解如何
sed 's/\^\[/\o33/g;s/\[1G\[/\[27G\[/' /var/log/boot
工作以及这些作品的含义。我阅读的手册页让我更加困惑,我尝试了信息 sai Id 但不知道如何工作!我对 Linux 很陌生。Debian 是我的第一个发行版,但似乎是一个相当合乎逻辑的起点,因为它是许多其他发行版的根源,并且已经存在了一段时间,所以可能做得很好并且相当标准化。如果需要,我正在运行 Wheezy 64 位作为参考。
该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
命令实际上是两个单独的命令:
s/\^\[/\o33/g
s/\[1G\[/\[27G\[/
#1 s
(替代)命令的目的是将所有出现的 替换为(字符)'^['
的八进制值。但是,这个命令有一个错误。转义八进制代码的正确 bash 语法是,因此编写此命令的正确方法是:033
ESC
sed
\nnn
sed
s/\^\[/\033/g
注意g
替换字符串后的尾随?表示进行全局替换;没有它,只有第一次出现会被改变。
#2 的目的是将所有出现的字符串替换\[1G\[
为\[27G\[
. 但是,此命令也有一个错误:需要尾随g
才能导致全局替换。所以,第二个命令需要这样写:
s/\[1G\[/\[27G\[/g
最后,将所有这些放在一起,这两个sed
命令将应用于/var/log/boot
文件的内容,其中输出已将所有出现的^[
转换为\033
,并且字符串\[1G\[
已转换为\[27G\[
。