sed 是 stream editor 的缩写,它一种流编辑器,它一次处理一行内容 。
基本用法如下:
# sed --help
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
# sed [参数] '范围 操作' 文件
例:
sed -n '1,4 p' demo.txt # 打印demo.txt文件1~4行的内容
常用选项参数
-n使用安静(silent)模式。加上-n参数后,则只有经过sed特殊处理的那一行(或者command)才会被列出来。-i直接编辑原文件-i.bak直接编辑原文件,同时会生成一个.bak的备份文件。推荐使用这种方式。防止误操作-f-f filename可以执行filename内的sed命令-e多点编辑
范围选择
sed 可以很灵活的查找对应范围的内容,常见的范围选择如下:
2选择第二行$选择最后一行2,5选择 2~5行1~2奇数行2~2偶数行1,$第一行到文件最后一行
另外 sed 还支持正则匹配。比如:
-
/name/出现name 字符的行 -
/name/,+3出现 name 字符的行内容以后边的3行 -
/^xxx/选择已xxx开头的行 -
/xxx/,/yyy/出现xxx的行以及出现yyy行之间的数据 -
常见正则匹配表达式如下:
-
^匹配行开始。 如:/^sed/以sed开头的行 -
$匹配行结束。如:/sed$/以sed结尾的行 -
.单个字符 -
*0个或者多个匹配 -
+1个或者多个匹配 -
?0个或者1个匹配 -
x\{m,n\}重复连续字符x,m-n次数 -
`x{m} # 重复字符x,m次,如:/0{5}/匹配包含5个0(连续的)的行。
-
常见操作
-
p打印匹配到的内容 -
d将匹配到的内容进行删除。 如果需要对原文件进行编辑, 需要结合-i或-i.bak参数 -
w匹配到的内容写入到其他文件。 例:sed -n '/xxx/ w output.txt' demo.txt # 将demo.txt 文件中包含 xxx 的行内容写入 output.txt
常用技巧
显示第一行的内容
sed -n '1'p filename
显示第三行到最后一行的内容
sed -n '3,$'p filename
显示匹配 name 关键的行
sed -n '/name/'p
打印出现 <command> 的行以及出现 </command> 行之间的数据
sed -n '/<command>/,/<\/command>/ p' demo.txt
打印长度不小于5个字符的行
sed -n '/^.\{5\}/ p' demo.txt
删除所有的空行
sed -e '/^$/ d' demo.txt
删除行首的空格
sed -e 's/^[ \t]*//g' demo.txt
删除行尾的空格
sed -e 's/[ \t]*$//g' demo.txt
给文件的每一行使用双引号包围起来
sed -e 's/.*/"&"/g' demo.txt
将文件的内容多行换成单行,同时每一行过滤掉收尾的空格并且使用双引号包围起来
例如:
abc
123
转成如下格式:
"abc","123"
sed -e 's/[ \t]*$//g' -e 's/^[ \t]*//g' -e '/^$/ d' -e 's/.*/"&"/g' demo.txt |tr "\n" "," |sed -e 's/,$//g'
# 这里还有一个相对简单的命令也可以起到相同的目的,不过行内字符串中间有空格或者换行符时得到的结果可能会不同
echo '"'`awk '{print $1}' demo.txt |xargs |sed 's/ /","/g'`'"'
原文链接:Linux 文本三剑客 - sed