[英]Understanding sed
我试图了解如何
sed 's/\^\[/\o33/g;s/\[1G\[/\[27G\[/' /var/log/boot
起作用了,这意味着什么。 我阅读的手册页让我更加困惑,我尝试了信息sai ID,但不知道如何工作! 我对Linux很陌生。 Debian是我的第一个发行版,但是似乎是一个很合逻辑的起点,因为它是许多其他发行版的基础,并且已经存在了一段时间,因此可能做得很好并且相当标准化。 如果需要,我将Wheezy 64位作为fyi运行。
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的目的是用\\[27G\\[
替换所有出现的字符串\\[1G\\[
\\[27G\\[
。 但是,此命令也有一个错误:需要尾随g
引起全局替换。 因此,第二条命令需要这样写:
s/\\[1G\\[/\\[27G\\[/g
最后,将所有这些放在一起,将两个sed
命令应用于/var/log/boot
文件的内容,其中输出已将所有出现的^[
转换为\\033
,而字符串\\[1G\\[
具有已转换为\\[27G\\[
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.