sed流编辑器
4.5 sed 流编辑器
4.5.1 语法
sed [OIPTION]…{script-only-if-no-other-script} {input-file}…
sed [选项]… {脚本(如果没有其他脚本)} [输入文件]…
默认sed不编辑元文件,仅对模式空间中的数据做处理:而后,处理结束后,模式控件打印到屏幕
4.5.2 简单示例
示例1:【sed ‘’ abc.txt】显示abc.txt文件内容
[[email protected] ~]# sed '' abc.txt
Hello word
www.xdd.cn
magedu:wq
[[email protected] ~]#
示例2:【ifconfig eth0 | sed -r '2!d;s#^.*:([0-9.]+) .*#\1#'
】取出本地IPV4的地址
[[email protected] ~]# ifconfig eth0 | sed -r '2!d;s#^.*:([0-9.]+) .*#\1#'
192.168.61.255
[[email protected] ~]#
示例2:【sed -ri 's/^[#,[:blank:]]+//'g ./fstab
】删除fstabe文件中所有以#开头或者以空白开头的首行的#和空白字符
4.5.3 常用参数
- 【-n】静默模式,不在默认显示控件中的内容,只与命令相关
- 【-i】直接修改源文件
- 【-e SCRIPT -e SCRIPT】可以同时执行多个脚本 。
- 【-f /PATH/TO/SED_SCRIPT】
例如:【sed –f /path/to/script file】将script文件中保存的脚本,一个个读取操作文件 - 【-r】使用扩展正则表达式
4.5.4 sed中脚本(AddressSCRIPT)的语法规则
- 【StartLine(起始行),EndLine(结束行)】比如:【1,100】
【$】表示最后一行
【$-1】表示倒数第一行
【0,$】表示从第一行到最后一行 - 【/RegEXP/】正则表达式
- 【/pattern1/,/pattern2/】第一次被pattern1(模式1)匹配到的行开始,至第一次被pattern2(模式2)匹配到的行结束,这中间的所有行
- 【LineNumber】指定的行LineNumber
- 【StartLine,+N】表示从startLine行开始,向后的N行
- 【d】删除复合条件的行
例如:【sed ‘1,2d’ /etc/fstab】删除fstab文件中的前两行显示其他到屏幕(源文件不做任何更改)
例如:【sed ‘/oot/d’ /etc/fstab】//删除包含了oot的行再显示文件 - 【p】显示复合条件的行
例如:【sed ‘/^//p’ /etc/fstab】重复显示匹配到的行(也就是重复显示以【/】开头的行)
如果只想显示匹配到的行可以使用【-n】选项
例如:【sed -n ‘/^//p’ /etc/fstab】 - 【a \string】在指定的行后面追加新行,最近内容为string
- 【i \string】在指定的行前最佳新行,内容为string
例如:【sed ‘/^//a # hello world’ /etc/fstab】在匹配的行的后面追加了“# hello world” - 【r filename】将指定的文件内容添加至复合条件的行处
例如:【sed ‘2r /etc/issue’ /etc/fstab】 将/etc/issue文件内容添加到/etc/fstab文件中的第二行后面 - 【w filename】将指定范围内的内容另存到指定文件中
例如:【sed ‘/oot/w /tmp/oot.txt’ /etc/fstab】将匹配到的内容写入文件oot.txt中,如果文件存在,覆盖写入。如果不存在,创建写入 - 【s/pattern/string/】或者【[email protected]@[email protected]或者【s#pattern#pattern#】查找并替换(默认替换每一行中第一次被模式Pattern匹配到的字符串)
- pattern模式能将匹配到的字符串替换成指定的字符串string(支持正则表达式)也就是将pattern匹配到的内容替换成string的内容
- 查找并替换中的修饰符:
【g】:全局替换
【i】查找时忽略字符大小写
【&】引用模式匹配到的整个串
支持正则表达式的分组参数。
例如:【ifconfig eth0 | sed -r '2!d;s#^.*:([0-9.]+) .*#\1#'
】取出本地IPV4的地址
- 查找并替换中的修饰符:
- 常用例子:
- 【sed ‘s/oot/OOT/’ /etc/fstab】或者【sed -e ‘1,$s/oot/OOT/’ /etc/fstab】将匹配到的行中oot替换成OOT,(注意:默认下能读取全文,所有这里匹配全文不必写)
- 【sed ‘s/^//#/’ /etc/fstab】将文件中以/开头的字符换成#
- 【sed ‘s///#/’ /etc/fstab】只替换每行中第一次匹配到的/换成#
- 【sed ‘s///#/g’ /etc/fstab】替换每行中所有匹配到的/换成#
注意:在’s///#/g’中使用的是/作为分隔符,也可以写成’[email protected]/@#@g’或者’s#$g’那么与分隔符相同的字符就不必转译
- 例如:【sed ‘s#l…e#&r#g’ sed.txt】或者【sed ‘s#(l…e)#\1r#g’ sed.txt】
将l…e(以l开头e结尾的单词后面都加上r)
注意:这里的&相当于引用模式匹配到的整个串(和后向引用一样)
"\1"是后向引用 - 例如:【sed ‘s#l(…e)#L\1e#g’ sed.txt】就可以将文件中like–>Like, love—>Love
4.5.5 帮助(sed --help)
[[email protected] ~]# sed --help
用法: sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...
-n, --quiet, --silent
取消自动打印模式空间
-e 脚本, --expression=脚本
添加“脚本”到程序的运行列表
-f 脚本文件, --file=脚本文件
添加“脚本文件”到程序的运行列表
--follow-symlinks
follow symlinks when processing in place; hard links
will still be broken.
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied).
The default operation mode is to break symbolic and hard links.
This can be changed with --follow-symlinks and --copy.
-c, --copy
use copy instead of rename when shuffling files in -i mode.
While this will avoid breaking links (symbolic or hard), the
resulting editing operation is not atomic. This is rarely
the desired mode; --follow-symlinks is usually enough, and
it is both faster and more secure.
-l N, --line-length=N
指定“l”命令的换行期望长度
--posix
关闭所有 GNU 扩展
-r, --regexp-extended
在脚本中使用扩展正则表达式
-s, --separate
将输入文件视为各个独立的文件而不是一个长的连续输入
-u, --unbuffered
从输入文件读取最少的数据,更频繁的刷新输出
--help 打印帮助并退出
--version 输出版本信息并退出
如果没有 -e, --expression, -f 或 --file 选项,那么第一个非选项参数被视为
sed脚本。其他非选项参数被视为输入文件,如果没有输入文件,那么程序将从标准
输入读取数据。
GNU sed home page: <http://www.gnu.org/software/sed/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
E-mail bug reports to: <[email protected]>.
Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.
[[email protected] ~]#