grep、awk、sed命令是shell编程的三个重要命令,学习了grep、awk后感觉暂时够用了,于是sed也就没看了。下面先对前面这两个命令总结一下。
一、grep命令
我理解的
用途:匹配查找文件/字符串的内容
输出形式:行
使用格式: grep [选项] 字符串/正则表达式 [文件]
管道符格式: |grep [选项] 字符串/正则表达式
(其实就是通过管道符作为输入取代后面的 [文件] 选项)
【选项】:
-n 显示航航
-v 去掉不匹配文本
-i 忽略大小写
-c 输出匹配行数
-h 查询多文件时不显示文件名
-l 只输出文件名(多文件)
二、awk命令
我理解的
用途:匹配查找域内容
输出形式:域
使用格式:awk [-F 分隔符] ‘commands’ file
(分隔符可不指定,默认空格;管道符格式同grep)
‘commands’格式:
‘BEGIN {…} {…} END {…}’
‘BEGIN {…} {…}’
‘BEGIN {…}’
‘{…} END {…}’
‘{…}’
BEGIN、END部分打印头部消息和尾部消息。
三、实例
部分结合正则表达式。
grep "bing" 1.txt #打印1.txt中bing字符串那行
grep '[Dd]ave' 1.txt #查找Dave或dave
echo $list |grep '^jack$'#精确匹配jack行首行尾
ip=`echo $1 |grep '192\.168\.[0-9]\{1,3\}\.[0-9]\{1,3\}'` #ip地址检查,补充\{n\}, \{n,\}
grep '^.$' 1.txt #匹配单字符行
grep '^..w' 1.txt #匹配第三个字符为w的行
grep '\babc\b' 1.txt #\b为单词边界,\B为非边界
awk '$2=="44" {print $0}' 1.txt #精确匹配,补充!=,<,<=,>,>=
awk '$0 ~ /jack/' 1.txt #~为匹配正则表达式,!~为不匹配
awk '/[Gg]reen/' 1.txt #匹配正则表达式G/green
awk '$1 ~ /^...a/' 1.txt #第四个字符为a
awk '$0 ~ /(green|yellow)/ {print $1}' 1.txt
awk '{if($2~/22/) print $0}'