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开头的行. 单个字符* 0个或者多个匹配+ 1个或者多个匹配? 0个或者1个匹配x\{m,n\} 重复连续字符x,m-n次数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'`'"'