正则表达式与文件格式化处理

  • 1.1 正则表达式介绍

正则表达式定义(regular expression):通过一些特殊字符得排列,用以查找替换删除一行或多行文字字符串,是一种字符串处理得标准依据。支持正则表达式得工具有:vi sed awk.,grep.但是cp ls 这些命令并不支持正则表达式。

  • 1.2 基础正则表达式
    grep 高级参数
    grep [-A][-B] ‘搜寻的字符串’ filename
    -A:后面可加数字,为after得意思,除了列出改行外,后续得n行也列出来
    -B:后面可加数字,为befer意思,除了列出改行外,前面得n行也列出来
    例如:dmesg | grep -n --color=auto ‘eth’ dmesg是获取内核信息得命令,获取内核信息中关于网卡得,并且要关键字显示颜色。-n 是顺便输出行号,整个用法说明功能类似于 ps-ef|grep 。。。
    假如每次使用grep 中得–color=auto 输入很麻烦,可以写进环境变量.cshrc中。
    alias grep =‘grep --color=auto’,再使环境变量生效即可

练习一:查找特定字符串
(1)查找特殊字符grep -n ‘the’ regular_express.txt
(2)反向查找,-v代表得是反向选择没有字符得那几行grep -vn ‘the’ regular_express.txt
(3)不论大小写查找grep -in ‘the’ regular_express.txt,-i是忽略大小写
练习二:利用中括号查找集合字符
(1)查找test或者taste两个单词,他们有共同点 t?st
grep -n ‘t[ae]st’ regular_express.txt
(2)查找有’oo’得字符
grep -n ‘oo’ regular_express.txt
(3)查找oo前面不带g得字符呢,可以用集合字符得反向选择[^]来完成
grep -n ‘[^g]oo’ regular_express.txt
(4)查找’oo’前面不想要小写字符,
grep -n ‘[1]oo’ regular_express.txt
参考语系用法
[:lower:]小写 [:upper:]大写 [:digit:]数字
(5)查找有数字得一行
grep -n ‘[[:digit:]]’ regular_express.txt
grep -n ‘[0-9]’ regular_express.txt
练习三:行首与行尾字符^$
(1)查找’the’只在行首出现
grep -n ‘^the’ regular_express.txt
(2)查找开头字母行首是小写
grep -n ‘2’ regular_express.txt
grep -n ‘3’ regular_express.txt
(3)查找行尾结束为小数点(.)的那一行
grep -n ‘.KaTeX parse error: Expected group after '^' at position 82: …格一行 grep -n '^̲’ regular_express.txt
练习四:任意一个字符.与重复字符*
点号:代表一定有一个任意字符的意思
星号:代表重复前一个0到无穷多次的意思,为组合形态
(1)查找g??d的字符串
grep -n ‘g…d’ regular_express.txt
(2)查找至少包含两个oo以上的字符串
grep -n ‘ooo*’ regular_express.txt
请注意 如果此时是查找 ‘o*’,代表的是具有空字符 或者一个O以上的字符,则会打印全部。
(3)字符串开头与结尾都是g,但是两个g之间至少要存在一个o
grep -n ‘goo*g’ regular_express.txt
(4)查找g开头与g结尾的字符,中间字符可有可无
grep -n ‘g.*g’ regular_express.txt
练习五:限定连续RE字符范围{}
因为{}在shell中有特殊意义,所以需要用转义符来搭配使用
(1)查找有俩个oo的字符
grep -n ‘o{2}’ regular_express.txt
(2)查找g开头的后面接2到五个o,后面接g的字符串
grep -n ‘go{2,5}g’ regular_express.txt

  • 1.3 基础正则表达式字符(characters)
    ^:待查找得字符串再行首
    $:行尾
    .
  • []
    [n1-n2]
    [^]
    {n,m}
  • 1.4 sed工具
    sed本身也是管道命令
    用法:sed [-nefr] [动作]
    -n:使用安静模式,加上-n之后,只有sed处理过得那一行才会被列出来
    -e:直接在命令模式下进行sed动作编辑
    -f :直接将sed动作写到一个文件里,
    -r:sed动作支持拓展型正则表达式
    -i:直接修改读取得文件内容,而不是由屏幕输出
    动作说明:[n1[,n2]] function
    function 有以下几个参数:
    a:新增
    c:替换
    d:删除
    i:插入
    p:打印
    s:替换

(1)练习:列出文件内容并打印行号,同时将2到5行删除
nl命令在linux系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号
nl regular_express.txt | sed -e ‘2,5d’
(2)删除第三行到最后一行
nl regular_express.txt | sed -e '3, d ′ , 其 中 d',其中 d代表最后一行
(3)在第二行后加上字符串tea
nl regular_express.txt | sed -e ‘2a tea’
(4)在第二行前加上字符串tea
nl regular_express.txt | sed -e ‘1a tea’
nl regular_express.txt | sed -e ‘2i tea’
(5)将2-5行的内容换成hdd
nl regular_express.txt | sed -e ‘2,5c hdd’
(6)获取文件的11-20行
nl regular_express.txt | sed -n ‘11,20p’
请注意,这时候要用n,是使用安静模式,只展示特殊处理的几行才能展示粗来
(7)sed的查找与替换与vi差不多
sed ’s/要被替换的字符串/新的字符串/g‘
vi 的使用 :n1,n2s/word1/word2/g 查找n1,n2之间的word1,更改成word2

  • 1.5 文件的格式化与相关处理
  • 1.5.1 格式化打印
  • 1.5.2 awk好用的数据处理工具
    awk ‘条件类型1{动作1}.。。。。’filename
    last -n 5|awk ‘{print $1 “\t” $3}’
    last -n 5 是展示前五条数据,后面是打印展示第一行以及第三行数据,\t是相当于空格tab键
    awk的内置变量
    NF:每一行($0)拥有的字段总数
    NR:目前awk所处理的是‘第几行的’数据
    FS:目前的分割字符,默认是空格键
    比如列出每一行的账号,也就是($1)
    列出目前处理的行数
    并且说明该行有多少字段
    last -n |awk ‘{print $1 ‘’\t lines:’’ NR ‘’\t columes: ‘’ NF}’

awk的逻辑运算符
就是包括大于小于 等于不等于
cat passwd|awk ‘{FS=":"} $3< 10 {print $1 “\t” $3}’
这个案例就是说明 按照冒号进行分割,第三列小于十,列出第三项和第一项
但是第一行root没有展示出来,是因为读入第一行的时候,那些变量默认还是以空格键来分割;以冒号分割只在第二行之后生效。因此可以预先设置awk的变量,利用begin
cat passwd|awk ‘BEGIN{FS=":"} $3< 10 {print $1 “\t” $3}’

  • 1.6 文件比较工具
    diff 用于比较两个文件之间的差别,以行单位来比较。
    diff [-bBi] from_file to_file
    from_file:一个文件名,作为预比较文件
    to_file:一个文件名,作为母大文件
    -b:忽略一行中的空白
    -B:忽略空白行
    -i:忽略大小写
    diff warn_op.ini0408test warn_op.ini
    可以比较不同的文件
    比如显示26 d27 意思是左边第26行被删除了??好像不太对
    cmp也是文件比较,主要单位是按照字节来比较
    cmp 【-s】 file1 file2
    -s:是将所有不同点的字节处都列出来
    patch是补丁的意思,意思是diff比较出来不同的地方 写到patch文件里面,然后补丁文件更新到

patch -pN <patch_file 更新
patch -R -pN <patch_file 还原


  1. :lower: ↩︎

  2. [:lower:] ↩︎

  3. a-z ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值