sed:
一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响。
处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space),
接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。
替换操作:
查找替换,只会替换每行第一个匹配的内容
sed 's/old_str/new_str/' filename
打印被替换的行, -n 和 -p 需要连用
sed -n 's/old_str/new_str/p' filename
使用g表示会替换每一行中所有匹配的内容
sed 's/old_str/new_str/g' filename
当需要从一行的某一个匹配开始替换时,使用ng
sed 's/old_str/new_str/ng' filename
使用-i会直接替换文件中的内容,文件会被改变
sed -i 's/old_str/new_str/g' filename
命令连用
sed -i 's/old_str/new_str/2g' filename
把每一行第二个匹配的内容替换,并把修改后的结果保存到文件中
sed -i -n 's/old_str/new_str/2gp' filename
把每一行第二个匹配并且替换后的内容提取出来,并保存到文件中,
文件中只有被替换行的内容,没有被修改的行将删除
删除操作:
删除空白行
sed '/^$/d' filename
删除文件的第二行
sed '2d' filename
删除第二行到末尾
sed '2,$d' filename
删除末尾行
sed '$d' filename
删除匹配的行
sed '/^my/d' filename
正则表达式匹配:
使用w+匹配每一个单词,使用[&]替换他, &表示匹配到的单词
sed 's/w+/[&]/g' filename
正则匹配到的第一个子串为1,以此类推
echo this is digit 7 in a number | sed 's/digit ([0-9])/1/' this is 7 in a number
echo aaa BBB | sed 's/([a-z]+) ([A-Z]+)/2 1/' BBB aaa
多表达式:
sed '表达式' | sed '表达式'
等价于 sed '表达式;表达式'
等价于 sed -e '表达式' -e '表达式'
从文件读入:r命令
会把文件中的内容显示在匹配行的后面,如果匹配了多行,显示多次
sed '/my/r test.txt' filename
写入文件:w命令
会把匹配到的行写入文件中
sed -n '/my/w test.txt' filename
追加(行下):a命令
sed '/^my/a his is a test line' filename
在第二行之后追加
sed '2a his is a test line' filename
插入(行上):i命令
sed '/^my/i his is a test line' filename
下一个:n命令
如果my被匹配,则移动到匹配行的下一行,替换这一行this为Tis,并打印
sed '/my/{n; s/this/This/;}' filename
变形:y命令
把1到10所有的abcde变成大些ABCDE,正则表达式不能使用这个命令
sed '1,10y/abcde/ABCDE/' filename
不加1,10表示匹配所有
退出:q命令
打印到第三行退出
sed '3q' filename
打印奇数行:
sed -n 'p;n' filename
打印偶数行:
sed -n 'n;p' filename