Linux学习笔记(12)——正则表达式

  1) 进阶grep

a)  grep在数据中查询字符串时,是以整行为单位进行数据的撷取。

b)  可以使用--color=auto来将关键字部分用颜色显示,为了提高效率,可以修改~/.bashrc文件添加『alias grep='grep --color=auto'』,然后source~/.bashrc

c)  grep练习

集合字符的反向选择 [^]

d)  行首不行尾字符 ^ $

那个 ^ 符号,在字符集合符号(括号[])之内与之外是不同的! 在[] 内代表『反向选择』,在 [] 之外则代表定位在行首的意义!

行尾结束为[.]的一行,由于[.]还有其他意义,故使用\来跳脱。

e)  任意一个字符 . 与重复字符 *

在bash中,*代表任意字符,但是在RE中代表重复字符。

 . (小数点):代表『一定有一个任意字符』的意思;

 * (星星号):代表『重复前一个 0 到无穷多次』的意思;

[.* 就代表零个戒多个任意字符]

f)  限定连续 RE 字符范围 {}

因为 {} 的符号在 shell 是有特殊意义的,因此, 我们必须要使用跳脱字符 \ 来使他失去特殊意义才行.

2) RE字符汇总

3) sed工具

a)  以行为单位的新增/删除功能

如果只要删除第 2 行,可以使用『 nl /etc/passwd | sed '2d' 』来达成, 至于若是要删除第 3 到最后一行,则是『 nl /etc/passwd | sed '3,$d' 』的啦,那个钱字号『 $ 』代表最后一行!

如果要加在第二行之前,直接『 nl/etc/passwd | sed '2i drink tea' 』就对啦!就是将『 a 』发成『 i 』即可

    『我们可以新增不只一行喔!可以新增好几行』但是每一行之间都必须要以反斜杠『 \ 』来进行新行的增加喔!

b)  以行为单位的取代与显示功能

c)  部分数据的搜寻并取代的功能

sed 's/要被取代的字符串/新的字符串/g'

d)  直接修改档案内容(危险动作)

4) 延伸正则表达式

5) 文件的格式化与相关处理

格式化打印: printf

printf '打印格式' 实际内容

%s 代表一个不固定长度的字符串,\t表示tab分隔符

6) awk

sed常用来一整行的处理,而awk倾向于一行中分成数个字段处理。

# awk '条件类型1{动作1} 条件类型2{动作2} ...'filename

awk 是『以行为一次处理的单位』, 而『以字段为最小的处理单位』。

7) 档案比对工具

a)  diff

diff一行为单位进行比对,一般用在纯文本文档比对上,故常用来比对同一版本的新旧文档。

b)  cmp:以字节为单位去比对

c)  patch

patch跟diff关系密切,主要用来升级档案,先比较新旧版本的差异,然后将差异部分制作成补丁挡,再由补丁挡更新新旧档案。

使用diff制作的补丁挡一般以.patch为扩展名,已以上表格为例,新档案看到-就好删除,看到+就会添加。

d)  档案打印准备pr

8) 练习

a)  /etc底下含有*的档案

[root@www~]# grep '\*' /etc/*

第一个*是正则表达式的特殊字符,需要跳脱,第二个*为bash的通配符。如果需要找到完整的/etc及其次目录,这样:

[root@www~]# grep '\*' $(find /etc -type f)

如果要找到时时全系统/,应该这样:

[root@www~]# grep '\*' $(find / -type f)

-bash:/bin/grep: Argument list too long

指令列的长度有限制,需要通过管线命令去控制,让grep每次只处理10个档名,这就需要先让find去找档案,然后通过xargs每次丢10个档案给grep来作为参数处理,最后grep开始实际搜寻档案。

[root@www~]# find / -type f | xargs -n 10 grep –l '\*'

b)  正则表达式建立新指令与新变量

c)  grep

将 /etc/termcap 内容取出后,(1)去除开头为 # 的行 (2)去除空白行 (3)去出开头为英文字母的那几行 (4)最终统计总行数该如何进行?

grep -v '^#' /etc/termcap | grep -v '^$' | grep '^[:alpha:]' | wc -l


-----以上整理自鸟哥的Linux私房菜

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值