设为首页 收藏本站
查看: 957|回复: 0

[经验分享] 文本文件查找,正则 sed awk

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-3-2 08:39:22 | 显示全部楼层 |阅读模式
二.  sed
格式 :   sed '内容'p -n 文件   打印某行  内容为英文用 / /括起来
          sed '内容'd  文件   打印除内容以外其他行
sed    不加-i 进行查看    加上-i  对源文件进行操作
             -r 不需要脱义  ? + ( ) | 需要脱义
         
打印指定行 sed '10'p -n 1.txt;
        不加-n 会每行出现2次,打印第10行
            sed '1,4'p -n 1.txt;
                  1到4行
            sed '5,$'p -n 1.txt
               5到末行

p为打印,d为删除
-n 静默模式,和p一起用。(只打印符合条件的行)
     sed -n '/^\//p' /etc/fstab
a \字符串:在指定行后面追加新行
     \n 可以换行
i \字符串:在指定行前面加新行


r 路径  指定的文件添加到查找到的行出
     sed '1,3r /etc/passwd' /etc/fstab
用于文件合并


w 路径 将查找内容写入指定文件路径下
sed '1,5w /etc/123.txt' /etc/fstab


s/被查找内容/替换内容/  默认替换是每行第一个
     [url=]g:全局替换[/url]
     [url=]i:忽略大小写[/url]
s/// s### s@@@



live-->liver
love-->lover
s/l..e/&r/g     被查找内容支持正则,但是替换内容不支持,只能用 & 代替前面查找的内容,后面加个r


s#\(l..e\)#\1r#g   后项引用


live-->Live
love-->Love
s#l\(..e\)#L\1#g   只能使用后项引用


sed -f /xssh/1.sh  /etc/fstab
使用 shell文件 执行文件

sed -r
使用扩展正则

history |sed 's#^[[:space:]]##g' | cut -d '  ' -f1
将行首空白砍掉


/内部如果有字符与格式脱意冲突 需要 "\"/
打印包含某个字符串的行 sed -n '/root/'p 1.txt
                        包含root的行

可以使用 ^ . * $等特殊符号-e 可以实现同时进行多个任务
   sed -e '/root/p' -e '/body/p' -n 1.txt 也可以用;实现

sed  '/root/p; /body/p' -n 1.txt

删除行 sed '/root/d' 1.txt;
           删除带有root的行 ,不需要带 -n
        sed '1d' 1.txt;
        删第一行
       sed '1,10d' 1.txt
         删1到10行

替换 sed '1,2s/ot/to/g' 1.txt,
         1、2行 ot 改为 to
其中s就是替换的意思,g为全局替换,否则只替换第一次的,
/也可以为 #, @ 等
         sed 's/BASH/123/gi' 1.log            
替换时候 加i  不区分大小写
  
删除所有数字 sed 's/[0-9]//g' 1.txt
删除所有非数字  sed 's/[^0-9]//g' 1.txt

head -n2 1.txt |sed 's/\(root\)\(.*\)\(bash\)/\3\2\1/'
调换两个字符串位置
                sed -r 's/(^.*)(:.*:)(\/.*$)/\3\2\1/g'
                sed -r 's#(^.#)(:.*:)(/.*$)#\3\2\1#'

直接修改文件内容 sed -i 's/ot/to/g' 1.txt



sed练习题:
把/etc/passwd 复制到/root/test.txt,用sed打印所有行
sed -n '1,$p' test.txt
打印test.txt的3到10行
sed -n '3,10p' test.txt
打印test.txt 中包含 'root' 的行
sed '/root/p'  -n test.txt
删除test.txt 的15行以及以后所有行
sed '15,$d' test.txt
删除test.txt中包含 'bash' 的行
sed '/bash/d' test.txt
替换test.txt 中 'root' 为 'toor'
sed 's#root#toor#g'  test.txt
替换test.txt中 '/sbin/nologin' 为 '/bin/login'
sed 's#/sbin/nologin#/bin/login#g'  test.txt
删除test.txt中5到10行中所有的数字
sed '5,10s#[0-9]##g' test.txt
删除test.txt 中所有特殊字符(除了数字以及大小写字母)
sed 's#[^0-9a-z]##g' 123
把test.txt中第一个单词和最后一个单词调换位置
sed -r 's#(^.*)(:.*:.*:.*:.*:.*:.*/.*/)(.*$)#\3\2\1#g' test.txt

               bash:x:0:0:root:/root:/bin/root  (最后一个单词与第一个调换)
sed -r 's#(^.*)(:.*:.*:.*:.*:.*:.*)(/.*/.*$)#\3\2\1#g' test.txt

               /bin/bash:x:0:0:root:/root:root  (最后的shell 与第一个单词调换)
sed 's#\(^.*\)\(:x:.*\)\(/.*$\)#\3\2\1#g' test.txt   (使用脱意)     -r 可以 省去脱意字符


把test.txt中出现的第一个数字和最后一个单词替换位置
sed -r 's#(^.*)([0-9])(.*/.*/.*/)(.*$)#\1\4\3\2#g' test.txt

sed -r 's#(^.*)([0-9])(.*/.*/.*/)(.*$)#\1\4\3\2#g' test.txt

把test.txt 中第一个数字移动到行末尾
sed -r 's#(^.*:)([0-9])(.*$)()#\1\4\3\2#g' 123
在test.txt 20行到末行最前面加 'aaa:'
sed '20s/$/aaa/g'  123



AWK


截取文档中的某段 awk -F ':' '{print $1}' 1.txt
也可以使用自定义字符连接每个段 awk -F':' '{print $1"#"$2"#"$3"#"$4}' 1.txt
匹配字符或字符串 awk '/oo/' 1.txt
针对某个段匹配 awk -F ':' '$1 ~/oo/' 1.txt
多次匹配 awk -F ':' '/root/ {print $1,$3}; $1 ~/test/; $3 ~/20/' 1.txt
条件操作符==, >,<,!=,>=;<=
awk -F ':' '$3=="0"'  1.txt;
awk -F ':' '$3>="500"' 1.txt;
awk -F ':' '$7!="/sbin/nologin"'  1.txt;
awk -F ':' '$3<$4' 1.txt ;
awk -F ':' '$3>"5" && $3<"7"' 1.txt
awk -F ':' '$3>"5" || $7=="/bin/bash"' 1.txt
awk内置变量 NF(段数)  NR(行数)
head -n3 1.txt | awk -F ':' '{print NF}'
head -n3 1.txt | awk -F ':' '{print $NF}'
head -n3 1.txt | awk -F ':' '{print NR}'
打印20行以后的行awk 'NR>20' 1.txt
awk -F ':' 'NR>20 && $1 ~ /ssh/'  1.txt
更改某个段的值awk -F ':' '$1="root"' 1.txt
数学计算, 把第三段和第四段值相加,并赋予第七段 awk -F ':' '{$7=$3+$4; print $0}' 1.txt
计算第三段的总和 awk -F ':' '{(tot=tot+$3)}; END {print tot}' 1.txt
awk中也可以使用if关键词 awk -F ':' '{if ($1=="root") print $0}' 1.txt



awk -F ‘:’ '{print $1}' 1.log
按 : 分割  显示 第一列
              print $0
   显示所有

awk -F ‘:’  '$1~/root/' 1.log
  第一列  匹配 root  显示所有列

{print NR}
显示个别列  NR为显示 行号


awk -F ':' '$3==0' 1.log
匹配第三段 是0的

>=  大于 等于
!=  不等于
$3<$4  符合这个比较项的
$3==$4  需要2个等号
1个等号 是赋值

$3==$4 && &1==$2    && 并且~

awk -F ':' '{print $NF}' 1.log
       此时 NF 等于7

          'NR>20 && $NF !="/sbin/nologin" '
          20行以后  并且 7列不等于

awk -F ':' '{(tot=tot+$3)}; END{print tot}' 1.log
          将第三列 连续相加

awk -F ':' '{(if $1=="root") print $0}' 1.log
   第一列 为 root  的行

awk -F ':'  '$7=$3+$4' 1.log
    第7列 等于  3  4 列相加  

awk练习题
用awk 打印整个test.txt (以下操作都是用awk工具实现,针对test.txt)
查找所有包含 'bash' 的行
用 ':' 作为分隔符,查找第三段等于0的行
用 ':' 作为分隔符,查找第一段为 'root' 的行,并把该段的 'root' 换成 'toor' (可以连同sed一起使用)
用 ':' 作为分隔符,打印最后一段
打印行数大于20的所有行
用 ':' 作为分隔符,打印所有第三段小于第四段的行
用 ':' 作为分隔符,打印第一段以及最后一段,并且中间用 '@' 连接 (例如,第一行应该是这样的形式 'root@/bin/bash' )
用 ':' 作为分隔符,把整个文档的第四段相加,求和


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-42855-1-1.html 上篇帖子: bash脚本编程之条件判断、算术运算及实例 下篇帖子: bash 正则表达式,文本文件查找 grep egrep 文本文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表