shell脚本的常见问题以及基本用法,sed,awk

shell脚本里面的正则和python里面某些地方有点小不同。

例如,python中a{4}代表4个a,但是shell里面a\{4\}要用脱义

                          a{3,4}                               a\{3,4}\

grep  "^$" 代表空行

grep -c 统计行数

grep -C1显示上下两行-C2显示上下各两行

grep -A1显示下面一行,依上同理

grep -B1显示上面一行,依上同理

grep  -r遍历目录下所有子目录

egrep(grep扩展模块)==grep -E

在grep里面不能直接用,要加脱义字符+ ?,但是egrep可以直接用

+表示一个或者多个 +前面的字符

?可有可无前面的字符

egrep  ‘r(oo)|(at)t’

root 或者ratt

还有就是用egrep  {2}   {2,3}不用脱义这个跟python很像


但是在egrep里面可以用

uniqu -c除重,在之前必须用sort排序才行

           -u  只显示唯一的行(不重复的行)

split  -b  1M  filename根据文件大小进行切割


sed -n '1,$p' filename  显示1到最后一行

匹配 sed -n  '/root/p' filename  显示有root的行

        和grep比较类似要加脱义字符 sed  -n '/root\+/p' filename

一般主要用在删除和替换上

sed  -n '10d' filename  删除第10行

sed  -n  '/root/d' filename 删除包含root的行,但是不会改变原文件,只是会把改变后的文件输出而已

 sed  -i 会改变原文件(慎用这个参数)

sed 's/root/bash/g' filename  用root替换 bash 跟vim 中用法是一致的

sed  ‘s/[0-9]//g’  filename  把数字都删掉

字段颠倒

sed  's#(第一段)(二段)(三段)#\3\2\1#  变成(三段)(二段)(一段)这种形式




awk -F  ':'    'print{$1}'   filename   以:分割 打印出第一列

                    'print{$1,$3}'  打印第一列和第三列

                     'print{$0}' 表示整行

awk -F ':'   '$1~/root/' filename  用第一列去匹配 root

awk -F ':'   '$1==10 '   filename第一列的数值等于10的才匹配出来

                   'print{NR}'    NR表示行号

awk -F ':'   '$1==“/bin/bash” '   filename

awk -F ':'   '$1=$3+$4” '   filename

$NF 表示最后一列


  

















你可能感兴趣的:(linux)