sed笔记

工作原理
语法格式

工作原理
sed是一个非交互式的流编辑器。所谓非交互式,是指使用sed只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出;而所谓流编辑器,是指sed每次只从文件(或输入)读入一行,然后对该行进行指定的处理,并将结果输出到屏幕(除非取消了屏幕输出又没有显式地使用打印命令),接着读入下一行。整个文件像流水一样被逐行处理然后逐行输出。
下面我们看一下sed的工作过程。
sed不是在原输入上直接进行处理的,而是先将读入的行放到缓冲区中,对缓冲区里的内容进行处理,处理完毕后也不会写回原文件(除非用shell的输出重定向来保存结果),而是直接输出到屏幕上。sed运行过程中维护着两个缓冲区,一个是活动的“模式空间(pattern space)”,另一个是起辅助作用的“暂存缓冲区(holding space)”。一般情况下,每当运行sed,sed首先把第一行装入模式空间,进行处理后输出到屏幕,然后将第二行装入模式空间替换掉模式空间里原来的内容,然后进行处理,以此类推。
一般情况下暂存缓冲区是用不到的,但有特殊的命令可以在模式空间与暂存缓冲区之间交换数据,后文将有介绍。由于sed对文本的所有操作都是在缓冲区里进行的,所以不会对原文件造成任何破坏。

语法格式
sed [options] 'command' file(s)
sed [-Options] [‘Commands’] filename
其中command部分格式为[地址1,地址2]命令[参数]
[address-range][sed-command]或
[Pattern-to-match][sed-command]

地址范围可以是一个数字,这个数字代表了一个行号;也可以是一个用逗号分隔的两个数字表示的范围(包括这两行)。范围可以是数字,正则表达式,或是两者的组合。
这里的pattern-to-match也可以看作是一个地址,这个地址是所有与指定模式匹配的行的行号。
command中的命令必须出现,参数根据命令可有可无
sed默认打印每一行
注意,地址范围和sed命令之间没有空格,如果加入空格,sed也会将其忽略。参数-n用来取消默认输出。默认情况下,sed每读入一行到模式空间,无论是否对其进行处理,在读入下一行之前多要将模式空间中的内容输出到屏幕上。参数-n可以用来取消这种默认的输出,只有当用户用命令p时才将指定的行输出到屏幕。如果没有用参数-n而又对指定行执行了p命令,那么这些行将会被打印两次。

原来以为只能是s后跟/,但是发现如下
在s后加@,#,$ 等等....     代替范围 s/
sed -i 's@41_@1111111111@g' grub.cfg
sed -n '/11111/p' grub.cfg
sed -i 's#1111111111#222222#g' grub.cfg

删除前导空格

sed 's/^[ ]*//'

原文地址:https://www.cnblogs.com/createyuan/p/4212795.html