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