2007年2月11日星期日

一些程序的正则表达式

sed

sed脚本   描述



sed 's/^$/d' price.txt
删除所有空行
sed 's/^[ \t]*$/d' price.txt
删除所有只包含空格或者制表符的行
sed 's/"//g' price.txt
删除所有引号

awk

awk脚本  

描述





awk '$0 !~ /^$/' price.txt


删除所有空行
awk 'NF > 0' price.txt


awk中一个更好的删除所有行的办法
awk '$2 ~ /^[JT]/ {print $3}' price.txt


打印所有第二个字段是'J'或者'T'打头的行中的第三个字段
awk '$2 !~ /[Mm]isc/ {print $3 + $4}' price.txt


针对所有第二个字段不包含'Misc'或者'misc'的行,打印第3和第4列的和(假定为数字)
awk '$3 !~ /^[0-9]+\.[0-9]*$/ {print $0}' price.txt


打印所有第三个字段不是数字的行,这里数字是指d.d或者d这样的形式,其中d是0到9的任何数字
awk '$2 ~ /John|Fred/ {print $0}' price.txt


如果第二个字段包含'John'或者'Fred'则打印整行

grep

grep命令   描述



grep '\t5-...1' phone.txt
把所有电话号码以5开头以1结束的行打印出来,注意制表符是用\t表示的
grep '^S[^ ]* R' phone.txt
打印所有姓以S打头和名以R打头的行
grep '^[JW]' phone.txt
打印所有姓开头是J或者W的行
grep ', ....\t' phone.txt
打印所有姓是4个字符的行,注意制表符是用\t表示的
grep -v '^[JW]' phone.txt
打印所有不以J或者W开头的行
grep '^[M-Z]' phone.txt
打印所有姓的开头是M到Z之间任一字符的行
grep '^[M-Z].*[12]' phone.txt
打印所有姓的开头是M到Z之间任一字符,并且点号号码结尾是1或者2的行

egrep

egrep command   Description



egrep '(John|Fred)' phone.txt
打印所有包含名字John或者Fred的行
egrep 'John|22$|^W' phone.txt
打印所有包含John 或者以22结束或者以W的行
egrep 'net(work)?s' report.txt
从report.txt中找到所有包含networks或者nets的行




没有评论: