特殊字符的匹配

特殊字符含义
*任意长度的任意字符,长度可以是0
?任意一个字符
[]单个字符,如[A]即A符合要求
[ - ]范围,如[A-Z]即A...Z符合要求
.除换行符\n以外的任何单字符
^输入字符串开始的位置,一行开始的位置
$在字符串的末尾匹配

特别注意,如果[]^联合使用,比如[^Bb],则表示除了Bb其它字符都可以表示

grep

选项含义
-c表示找到搜寻字符串出现的次数
-i忽略大小写
-n显示匹配行和行号
-v显示不包含某某某的行

通过管道过滤ls -l输出的内容,只显示以a开头的行。

ls -l | grep '^a'

显示所有以d开头的文件中包含test的行

grep 'test' d*

显示所有在aa、bb、cc文件中匹配test

grep 'test' aa bb cc

显示在aa文件中所有包含每个字符串至少有5个连续小写字符的字符串的行

grep '[a-z]\{5\}' aa

如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示改行

grep 'w\(es\)t.*\1' aa

特别注意,以上例子,如果使用grep -E,就不用使用"\"进行转义

find

与grep不同,grep用于查找文件内容,文件路径写在命令的最后;而find是找文件,文件路径写在find紧挨着的之后

选项含义
-name根据文件名
-size根据文件大小
-n显示匹配行和行号
-name 
find ./ -name "init"  
-size 
find ./ -size +3M  (默认单位512B,扇区大小0.5k)
-type
find ./ -type f
-atime | ctime | mtime 
a:访问 
c:内容被修改
m:属性被修改
find ./ -atime +5
以上 "+"为超过,反之...

sed

sed [option] 'script(pattern+action)' file1 file2 ...
sed [option] -f scriptfile file1 file2 ... 
sed -e scripts 允许多个脚本被执行
sed -i script file 反应到原文件中
sed -n script file 静默输出,只输出符合条件的行
/pattern/actions
sed 's/old/new/g' file 替换file中old成new
sed '2,5d' file 删除file中第2到第5行内容
sed '2a fygod' file 在file中第2行后添加fygod
sed 's/bc/-&-/' testfile &表示原文件的当前行中与pattern1相匹配的字符串
sed 's/\([0-9]\)\([0-9]\)/-\1-~2~/' testfile 将一个两位数第一位换成-n-第二位换成~n~

\1 \2 原串中第一个字符、第二个字符
& 替代原串

awk

sed 以行为单位处理文件,awk比sed强之处在于不仅能以行为单位还能以列为单位处理文件,awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义,比如/etc/passwd文件的每一行有若干个字段,字段之间以:分割,就可以重新定义awk的列分隔符为:并以列为单位处理这个文件。

awk option 'script' file1 file2 ...
awk option -f scriptfile file1 file2 ...
/pattern/{actions}
awk '{print $0}' 全部

cut

cut -d'[分隔符]' -f[域]