Linux文本处理命令

Linux文本处理命令支持的正则表达式有两类 :

  1. 基础正则
  2. 扩展正则:可以做组字符串处理

grep: 筛选出想要的字符串

^在[]内表示反向选择,在[]外表示定位在行首。

1
2
3
4
5
6
7
8
9
10
11
grep -n 't[ae]st' filename              //a或e
grep -n 'goo' filename //oo前无g
grep -n 'a-zoo' filename //oo前无小写字母
grep -n '^the' filename //the出现在行首
grep -n '.$' filename //行结尾是小数点
grep -n '^$' filename //空白行
grep -n 'g..d' filename //找出g??d
grep -n 'oo*' filename //一个o以上的字符串
grep -n 'o{2}' filename //两个oo
grep -n 'o{2, 5}' filename //2-5个oo
grep -n -v 'test' filename //找出无test的行

sed: 对指定的字符串执行替换删除新增

1
2
3
4
5
6
7
8
nl /etc/passwd | sed '2,5d'                                       //删除2-5行
nl /etc/passwd | sed '2i drink' //前插
nl /etc/passwd | sed '2a drink' //后插
nl /etc/passwd | sed '2i drink\eat' //前插drink和eat,有换行
nl /etc/passwd | sed '2c drink' //替换第二行为drink
nl /etc/passwd | sed -n '5,7p' //打印5-7,-n只显示被sed处理的行
nl /etc/passwd | sed 's/待替换/新串/g'
cat /etc/man.conf | grep 'MAN' | sed 's/#.*//g' | sed '/^$/d' //删除注释和空白行

egrep: 支持扩展正则表达式

1
grep -v '^$' filename | grep -v '^#'

等同

1
grep -v '^$|^#' filename
  1. *:零个或零个以上

    1
    egrep -n 'go*d' filename
  2. +:一个或一个以上

    1
    egrep -n 'go+d' filename
  3. |:用or的方式找

    1
    egrep -n 'gd|good' filename
  4. ():群组字符串

    1
    egrep -n 'g(la|oo)d' filename
  5. ()+:多个重复群组判断

    1
    egrep -n 'A(xyz)+C' filename