grep 过滤需要的内容
-i 忽略大小写
-o 显示匹配到的内容,其他不显示
-v 排除内容
-c 统计匹配行个数
-n 显示匹配行及行号
-E 扩展查找模式(相当于 egrep)
-A 显示匹配行,并显示之后num行
-w 按单词过滤,相当于\b
grep stu –A 10 b.txt 过滤stu,显示改行之后的10行
sed 流编辑器,实现对文件的增删改查
选项:
-n 屏蔽默认输出
-i 直接修改源文件
-e 可指定多个处理动作
-r 支持扩展表达式
{} 可组合多个命令,以;分隔
-f 使用sed脚本
定址符:
p 打印行
d 删除行
s 字符串替换
1 对第1行处理
1,3 对第1到3行处理
1,+3 对第1行后面3行处理
1~2 对1,3,5,7……行处理
1,$ 对1行到最后1行处理
/aa/,/bb/ 对a行到b行处理
/aaa/,9 对a行到第9行,若前9行没有,会显示后9行匹配的行
查:
sed –n ’20,30p’ b.txt 打印20到30行
sed -n '3p;6p' a.txt 打印第3和6行
sed -n '3,+6p' a.txt 打印第3行及其后6行
sed -n '/^bin/p' a.txt 打印以bin开头的行
sed -n 'p;n' a.txt 打印奇数行,n表示读下一行(隔行)
sed -n 'n;p' a.txt 打印偶数行,n表示读下一行(隔行)
sed -n '8,${n;p}' a.txt 打印8行到末尾所有的偶数行
sed -n '$=' a.txt 打印文件的行数
sed -n '/a/{=;p} ' b.txt 显示行号
sed -n l aaa.jpg 打印不可见字符
删除
sed '3,5d' a.txt 删除第3到5行
sed '/xml/d' a.txt 删除所有包含xml的行
sed '/xml/!d' a.txt 删除不包含xml的行
sed '/^xml/d' a.txt 删除以xml开头的行
sed '$d' a.txt 删除最后1行
sed '/^$/d' a.txt 删除所有空行
sed '/^$/{n;/^$/d}' a.txt 删除重复空行,连续两个空行只保留一个
sed -r'/a|b/d' a.txt 删除a或b的行
sed '2,~2d' a.txt 删除2行到2的倍数行
改
c 行替换
s 字符串替换
sed '2cxx' m.txt 第2行替换成xx
sed '3,6cxx' m.txt 第3到6行替换成1行xx
sed -n '2cxx\nyy' m.txt 第2行替换成xx并换行yy(\n换行符==强制换行)
sed -e '3cxx' -e '6cxx' m.txt 第3行和第6行替换成xx
sed 's#a#&s#g' a.txt 所有的a都替换成as,&代表查找串(类似{})
sed 's#a##g' a.txt 删除所有行的a
sed '4,7s/^/#/' a.txt 4到7行加#号
sed '4,7s/^#//' a.txt 4到7行去掉#号
sed 's/a/B/ig' a.txt 所有行的a替换成B(不区分大小写)
增
i 行前插入
a 行后插入
sed '2ixx' m.txt 在第2行前插入行xx
sed '3,6ixx' m.txt 在第3-6行每行前插入xx
sed '2axx' m.txt 在第2行后插入xx
sed '/^yy/axx' m.txt 在yy开头的行后插入xx
() 后向引用
把源数据保存起来,在替换的时再使用
sed -r 's#(^.)#A\1#' a.txt 在行首添加A并输出
sed -r 's#(^.)(.*)(.$)#\1#' a.txt 输出\1的数据
sed -r 's#(^.)(.*)(.$)#\3\2\1#' a.txt \3\2\1的数据
ls *.bak |sed -r "s#(^.*)(.bak$)#mv & \1.txt#g" 把所有.bak改成.txt
sed -nr 's#([^:]+)(:.*:)(/.*$)#\3\2\1#gp' /etc/passwd (1和3对调)
(:开头1次或多次的字符串)(从:到:所有的字符串)(以/结尾的字符串)& 保存替换时的源字符串
sed -n 's#20#&#gp' a.txt 替换文本内容&=保留源字符)
sed 's/root/&admin/' a.txt 把root替换成rootadmin
sed 's/[0-9]/(&)/g' a.txt 把数字用()括起来
sed –i.bak 's#a#&s#g' a.txt 修改源文件并备份
{} 命令组合键
sed -n '3{=;p}' b.txt 输出3行并显示行号(3=;3p)
! 取反
sed '1,3!d' a.txt 删除不是1到3行
sed '/a/!d' a.txt 删除不是a的行
sed '1~2d' a.txt 删除奇数行(模式空间够2行,删1行)
sed '1~2!d' a.txt 删除偶数行
n 把当前行的下一行读取到模式空间
sed -n 'p;n' a.txt 打印奇数行,n表示读下一行(隔行)
sed -n 'n;p' a.txt 打印偶数行,n表示读下一行(隔行)
文件操作
r 读取文件 --r动作应结合 -i 选项才会存入,否则只输出
w 保存到文件 --w动作以覆盖的方式另存为新文件
sed -i 'r a.txt' b.txt 把a导入到b(b.txt要存在)
sed -i '2r a.txt' b.txt 把a导入到b的第2行下方
sed 'w c.txt' b.txt 把b另存为c(c不用存在)
sed '/^x/w c.txt' b.txt 把b以x开头的行存为c
-H 模式空间---追加----保持空间--复制
-h 模式空间---覆盖----保持空间--复制
-G 保持空间---追加----模式空间--剪切
-g 保持空间---覆盖----模式空间--剪切
sed '1h;2H;$G' b.txt 把文件的前2行复制到文件的末尾
sed '1h;2H;1,2d;$G' b.txt 把文件的前2行剪切到文件的末尾