zoukankan      html  css  js  c++  java
  • 别人的Linux私房菜(12)正则表达式与文件格式化处理

    vi gerp awk sed支持正则表达式   cp ls不支持,只能使用bash本身的通配符

    正则表达式分为基础正则表达式和拓展正则表达式

     使用正则表达式注意语系的影响

     http://cn.linux.vbird.org/linux_basic/0330regularex_2.php

    grep  查找字符

    -A :后面可加数字,为 after 的意思,除了列出该行外,后续的 n 行也列出来;
    -B :后面可加数字,为 befer 的意思,除了列出该行外,前面的 n 行也列出来;

     如:demsg列出内核信息,dmesg | grep ‘qx1’       

    列出行号并不同颜色标记:dmesg | grep -n --color=auto ‘qx1’ 

    显示关键词的前二行后三行并标记 dmesg | grep -n -A3 -B2 --color=auto ‘qx1’ 

     查找特定字符串:grep -n 'the' regular_express.txt

     利用中括号 [] 来搜寻集合字节:查找tast和test:grep -n 't[ae]st' regular_express.txt

     反向选择^,取出不含g的oo:grep -n '[^g]oo' regular_express.txt

          不包含小写的oo:grep -n '[^a-z]oo' regular_express.txt

                   grep -n '[^[:lower:]]oo' regular_express.txt

     行首字节^,取出行首为小写字母的行:grep -n '^[a-z]' regular_express.txt

                      grep -n '^[[:lower:]]' regular_express.txt

     行尾字节$,取出行尾为.的行:grep -n '.$' regular_express.txt

         cat -An regular_express.txt#显示所有字符,行号

         去掉空白与注释行:grep -v '^$' /etc/syslog.conf | grep -v '^#'

    一定有一个任意字符.:取出包含两个任意字符的gxxd:grep -n 'g..d' regular_express.txt

    重复前一个字符0到无穷次:找出两个o及以上的字符串列出:grep -n 'ooo*' regular_express.txt

    限定连续正则表达式的字符范围{}:找出两个o的字符串行:grep -n 'o{2}' regular_express.txt

                   找出两个o到5个o的字符串行:grep -n 'go{2,5}g' regular_express.txt

                   找出两个o及以上的字符串行:grep -n 'go{2,}g' regular_express.txt

    找出文件中的属性为链接:ls -l /etc | grep '^l'

    sed处理数据,替换删除,新增选取等

    -n :列出经过sed 特殊处理的那一行
    -e :直接在命令列模式上进行 sed 的动作编辑;
    -i :直接修改读取的文件内容

    a新增,c行替换,d删除,i插入,p打印,s替换。如1,20s/old/new/g

    sed的动作使用单引号

    如:将2-5行删除,默认增加了e选项:nl /etc/passwd | sed '2,5d'    

    删除第二行:nl /etc/passwd | sed '2d'   删除第二行到最后一行:nl /etc/passwd | sed '2,$d'

    第二行后插入:nl /etc/passwd | sed '2a Drink tea or ...... drink beer ?'  插入添加的新行用表示。

    第二行前插入:nl /etc/passwd | sed '2i Drink tea or ...... drink beer ?'  插入添加的新行用表示。

    将二到五行取代为其他字符串No 2-5 number:nl /etc/passwd | sed '2,5c No 2-5 number'

    列出文件中的五到七行:nl /etc/passwd | sed -n '5,7p'

    取出文本中含有inet addr的部分并删除开头为.*addr:的部分:/sbin/ifconfig eth0 | grep 'inet addr' |  sed 's/^.*addr://g'

    取出文本中含有MAN的部分并删除注释行,空白行的部分:cat /etc/man_db.conf | grep 'MAN'| sed 's/#.*$//g' | sed '/^$/d'

    修改文件中行尾为.的变为!:sed -i 's/.$/!/g' regular_express.txt

    在文本行尾增加 # This is a test: sed -i '$a # This is a test' regular_express.txt

    拓展正则表达式:

    http://cn.linux.vbird.org/linux_basic/0330regularex_3.php

     使用printf进行的格式化输出:

    例如:printf '%s %s %s %s %s ' $(cat printf.txt)

    将ASCII对应的字符输出:printf 'x45 '

     awk数据处理工具,默认的分隔符为空格键或tab

     执行方案为:awk '条件类型1{动作1} 条件类型2{动作2} ...' filename

     使用awk工具显示第一列和第三列,$0代表所有列,$1第一列:last -n 5 | awk '{print $1 " " $3}'

     执行步骤为:1每次读取一行,2判定,3执行操作,4进行后续行的判定和执行。

     NF每行字段总数,NR正在处理第几行,FS分割字符为。

     如显示每次处理的行号和字段总数:last -n 5| awk '{print $1 " lines: " NR " columns: " NF}'

     显示,开始前就预设以冒号分隔,第三列的值小于10,则显示第1和第三列:cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 " " $3}'

     awk的花括号里面支持if语句。

    文件对比工具diff

    diff [-bBi] from-file to-file

    如对比文件:diff passwd.old passwd.new

    显示左边第x行被  删除 (d)   取代 (c)  掉,以右边文件第x行为基准的情况下。

    对比目录:diff /etc/rc3.d/ /etc/rc5.d/

    cmp对比两个文件内容,默认只显示第一个不同点:

    例如:cmp passwd.old passwd.new

    patch和diff配合,进行文件的升级和还原

    制作文件差异补丁:diff -Naur passwd.old passwd.new > passwd.patch

    -p为取消几层目录,如补丁文件和升级或还原文件在同一目录下则不需要取消目录。

    -R文件恢复成为旧版本。

    文件升级:patch -p0 < passwd.patch

    文件还原:patch -R -p0 < passwd.patch

    文件列印准备pr

    如 :pr /etc/man.config

    增加了时间,文档名,页码信息...

  • 相关阅读:
    atitit.无为而治在企业管理,国家治理,教育领域的具体思想与实践
    atitit.浏览器web gui操作类库 和 操作chrome浏览器的类库使用总结
    atitit.loading的设计与实现控件选型attilax 总结
    atitit.系统托盘图标的设计java swing c# .net c++ js
    atitit.流程标准化 mysql启动不起来的排查流程attilax总结
    atitit.图片相似度与图片查找的设计 获取图片指纹
    atitit.it企业管理 项目管理 中的 授权机制 的来源 君权神授 的一定合理性
    atitit..国富论 在现代it企业项目管理中的作用attialx 总结国富论读后感 attialx
    atitit.印度教与java宗教的特点与观念对比 attilax总结
    atitit.验证码识别step2剪贴板ClipBoard copy image图像 attilax总结
  • 原文地址:https://www.cnblogs.com/bai2018/p/10724647.html
Copyright © 2011-2022 走看看