egrep 使用扩展的正则表达式
fgrap 优化的算法
-E --extended-regexp
-F --fixed-strings
-i ignore cases
-f Obtain patterns from FILE,one per line.
-v Invent the sense of matching,to select non-matchint lines
-l print the name of files
为了配合非英语的环境,POSIX标准强化其字符集范围的能力
POSIX字符集
[:alnum:] digit
[:alpha:] character
[:blank:] spcae or tab
[:cntrl:] control
[:digit:] digit
[:graph:] nonspace
[:lower:] lower character
.....
ex
[ab[.ch.]de] 匹配 a or b or d or e or ch
后向引用
使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。
\(ab\)\(cd\)[def]*\2\1
第一步包括表达式在\(**\) 然后\digit
区间表达式
\{n\}
\{n,\}
\{n,m\}
文本匹配锚点
^$
如果有一串abcABCdefDEF
模式
ABC YES
^ABC no
def yes
def$ no
[[:upper:]]\{3\} yes
[[:upper:]]\{3\}$ yes
^[[:alpha:]]\{3\} yes
ex
cc -E foo.c | grep -v '^$' >foo.out 预先删除空行
扩展正则表达式(好像就跟我上面摘录的差不多)
后向引用不存在啊
执行文本体会的正确次序应该是sed——流编辑器
基本用法:
sed 's/:.*//' /etc/passwd | sort -u
sed 's/\/home\/tolstoy\//\/home/\1t\//'
echo /home/tolstoy/ | sed 's;\(/home\)/tplstoy/;\t/lt/;'
mov altga.xml altga.xml.old
sed 's/Altlanta/&,the capital of the south/' <altga.xml.old > altga.xml
&表示从此点开始替代成匹配与正则表达式的整个文体
g表示替代全部匹配,没有则表示替代第一个,也可以控制替代第几个
-e表示有多个匹配
如果数据里有斜杠就考虑用冒号做定界符
匹配特定行
/oldfunc/ s/$/# xxx:migrate to newfunc/
s里空模式指使用前一个正则表达式
/Tolstoy/ s//& and Camus/g
sed -n '10,42p' foo.xml 打印10~42行
sde '/foo/,/bar/ s/baz/qunx/g'
逗号隔开的称为范围表达式
sed '/used/!s/new/used/g'
使用cut选定字段
cut -d : -f 1,5 /etc/passwd 取出域
ls -l | cut -c 1-10
ls -l | cut -d ' ' -f 3
join 连接字段
#!/bin/sh
#merge-sales.sh
sed '/^#/d' quotas | sort > quotas.sorted
sed '/^#/d' sales | sort > sales.sorted
join quotas.sorted sales.sorted
rm quotas.sorted sales.sorted
使用awk重新编排字段
awk 'program' [file ...]
awk设计的重点就在字段与记录上;awk读取输入记录,然后自动将记录切分成字段。
awk -F: '{printf "User %s is really use $s",$1,$5}' /etc/passwd