文本编辑工具Sed常用使用使用方法
sed 命令是处理数据以行为单位,每次只能处理一行。处理时sed会把要处理的数据单独拿到内存中模式空间,处理完后把容送往屏幕,接着处理下一行,模式空间可以理解为流水线,处理完输出接着处理下一行继续输出。sed还有一个保持空间,保持空间可以理解为仓库,处理数据时暂存数据到仓库,如果不使用高级命令这个基本用不到。
数据处理都在内存中,如果不加特定的写入文件命令,sed不会对原文件造成更改
sed 自定义分隔符,选取第一个域数据
cat a1.txt
1:2:3:4:5
cat a1.txt | sed -n ‘s/:.*$//’
1
这里用到了正则表达式,将冒号到结尾的部分都清空,这样就只留下了1
sed 好用的一些选项
替换操作:s命令
sed ‘s/book/books/’ file #将book替换为books
-n一般与-p共同使用,表示只打印修改过的数据
直接编辑文件选项-i,会匹配file文件中每一行的第一个book替换为books:
sed -i ‘s/book/books/g’ file
全面替换标记g
使用后缀 /g 标记会替换每一行中的所有匹配:
sed ‘s/book/books/g’ file
当需要从第N处匹配开始替换时,可以使用 /Ng:
echo sksksksksksk | sed ‘s/sk/SK/2g’
skSKSKSKSKSK
echo sksksksksksk | sed ‘s/sk/SK/3g’
skskSKSKSKSK
echo sksksksksksk | sed ‘s/sk/SK/4g’
skskskSKSKSK
定界符
以上命令中字符 / 在sed中作为定界符使用,也可以使用任意的定界符:
sed ‘s:test:TEXT:g’
sed ‘s|test|TEXT|g’
定界符出现在样式内部时,需要进行转义:
sed ‘s//bin//usr/local/bin/g’
删除操作:d命令
删除空白行:
sed ‘/^$/d’ file
删除文件的第2行:
sed ‘2d’ file
删除文件的第2行到末尾所有行:
sed ‘2,$d’ file
删除文件最后一行:
sed ‘$d’ file
删除文件中所有开头是test的行:
sed '/^test/'d file
已匹配字符串标记&
cat a1.txt
a1
a2
a3
a4
a5
cat a1.txt | sed ‘s/a.*/&1/’
a1a
a2a
a3a
a4a
a5a
&代表之前匹配到的内容
好用的定位行范
//,//
显示已//开头的段落到//结尾的段落内容
sed -n ‘/a1/,/a3/p’ a1.txt
a1
a2
a3
#,# 其中#为数字,代表第一行到第三行
cat a1.txt | sed ‘1,3p’
a1
a2
a3
#,+#其中#为数字,代表第一行到3第三行
cat a1.txt | sed ‘1,+2p’
a1
a2
a3
组合多个表达式
sed ‘表达式’ | sed ‘表达式’
等价于:
sed ‘表达式; 表达式’
多点编辑:e命令
-e选项允许在同一行里执行多条命令
cat a1.txt | sed -e ‘1,3d’ -e ‘s/a/aa/’#删除第一行到第三行;并将a替换为aa
()将内容暂存保持空间
echo “hello world” | sed ‘s/(hello).*/world \1/’
world hello
是括号的预存储技术将括号中hello存起来到\1 \2 \3 …中
内容插入
从文件读入:r命令
file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面:
sed ‘/test/r file’ filename
追加(行下):a\命令
将字母a追加到以a开头的行后面:
sed ‘/^a/a\a’ a1.txt
在a1.txt文件第2行之后插入字母a
sed -i ‘2a\a’ a1.txt