shell编程之文本表达式

正则表达式:regex

linux命令常营三剑客:grep(过滤) sed(筛选,过滤) awk

grep -n ‘sh[ ]rt text 中括号匹配任意一个字符

^a整行的开头^取反

a$整行的结尾

grep -n '\.$'加反杠只显示出本身的字符

‘w.* d’

sed

&&:逻辑与

||:逻辑或

sort 可以按拼音顺序排序

-r 取反

uniq 去掉重复语句

-c 查看有多少重复语句

tr -s 删除重复字符

-d 删除所有输入的字符

grep -ni 'ten' text

-n 显示行数

-i 不区分大小写

-v 不包含指定的字符其他都显示

grep -n 'sh[io]rt'text

中括号里不管有几个字符,都只匹配一个,表示匹配其中的任意一个字节

正则表达式:

标准正则表达式 grep (仅仅过滤)

-n: grep -n 'test' test: 查看test文件并显示行号

-i:grep -i 'test' test: 查看test文件中test字符,不区分大小写

grep -n 'sh[io]rt' test: 匹配i或o任意一个字符

grep -n '[w]oo' test:匹配woo的行

grep -n '[^w]oo' test:匹配woo以外所有以oo结尾的其他字符

grep -n '[^a-z]oo' test:'oo'之前不是小写字母的任何字符

grep -n '[^a-zA-Z]oo' test:'oo'之前不是字母(无论是大写还是小写)的任何字符

grep '^[a-z]oo' test:任何以【a-z】开头的,后面跟俩o的行

grep '\.$' test 只显示有(.)的语句,不是通配符

grep '.$' test(.有特殊含义,代表任意单个字符)

grep '^$' test(以结尾作为开头,也就是空行)

grep -v '^#' test (test文件中所有以#开头的行)

grep -v '^#' test | grep -v '^$'(显示除了空行和被注释掉的行或:egrep -v '^$|^$' test)

grep -n 'w..d' test (..代表任意字符,也就是显示介于w和d之间任意俩字符的行)

grep -n 'wd' test (包含字母 'w' 后面跟着零个或多个字母 'd' 的行,并显示匹配行的行号。)grep -n 'ooo' test

grep -n 'w.*d' test(包含一个 'w',后跟零个或多个任意字符,然后是一个 'd' 的行,并显示匹配行的行号。)

grep -n '[0-9]' test (匹配带数字的行)

grep -n '[0-9][0-9]' test(匹配行中带有俩连续的数字)

grep -n 'o\{2\}' test:匹配连续出现俩“o”的行,带有{}也有其他作用,如果想让大括号成为大括号,需要转移字符

grep -n 'wo\{2,5\}d' test(w和d之间带有2个到5个字符o)

grep -n 'wo\{2,\}d' test(w和d之间带有2个以上的o)

sed (不仅具有过滤,还具有编辑功能)

sed -n 'p' test (p就是print,遍历显示,一行一行显示)

sed -n '3p' test (打印第三行)

sed -n 'p;n' test (打印奇数行,先打印再跳过)

sed -n 'n;p' test (打印偶数行,先跳过再打印)

sed -n '1,10{n;p}' test(打印前十行内的偶数行,n是next的意思,也就是跳跃,先跳跃后打印,所以是打印偶数行)

sed -n '1,$p' test(打印全部行)

sed -n '/the/p' test (打印出来带有the的行)

sed -n '4,/the/p' test(从第四行到包含字符串 "the" 的行之间的内容)

sed -n '4,/the/=' test(显示从第四行到包含the的行之间的行数)

sed -n '/^#/p' test(打印出来所有的注释行)

sed -n '/^P/p'(打印出来以大写p开头的所有行)

sed -n '/.$/p' test(转义.)(打印出来以.结尾的所有行,这里的.代表的不是任意字符而是本身的意思,所以要加一个转义字符)

sed -n '/wood/p' test (将匹配包含 "wood" 的所有行)

sed -n '//p' 转义符<>(匹配只包含 "wood" 这个单词的行)

sed '/^$/d' test(去除空行并显示,源文件内容不变)

sed '/.$/d' test(删除以.结尾的所有行,并显示)

sed '/^[a-z]/d' test (删除所有大写字母开头的所有行,并把结果显示)

sed '3d' test(删除第三行,把删除结果在屏幕上做暂时的输出,源文件不变)

sed 's/the/THE/' test(只会替换每行中第一个出现的 "the")

sed 's/the/THE/g' test(全局替换并全部显示,但是只改一下显示出来的内容,源文件内容不会改)

sed '2,10s/the/THE/g' test (2行带十行之间的全局替换并全部显示)

sed -i 's/the/THE/' test (加上选项 -i 源文件都改了)

sed 'the/{H;d};$G' test(the那一行放末尾,迁移)

  1. the/{...};

:这是一个地址匹配模式,它指定了后续的动作(在 {...} 中)应该应用于哪些行。在这个例子中,动作将应用于所有包含“the”的行。

  1. H

:这个命令将当前模式空间(pattern space)的内容追加到保持空间(hold space)的末尾,并在保持空间的内容和新追加的内容之间添加一个换行符。如果保持空间是空的,这个命令仍然会成功执行。

  1. d

:这个命令删除当前模式空间的内容,并且立即开始下一个循环,读取下一行输入。由于这个命令紧跟在 H 命令之后,所以所有包含“the”的行都不会被打印出来,而是被移动到保持空间。

  1. $G

:这个命令在文件的最后一行(由 $ 地址匹配模式指定)执行。它将保持空间的内容追加到当前模式空间的末尾。这意味着在文件的末尾,所有之前被移动到保持空间的行(即所有包含“the”的行)将被打印出来

sed '3aNihao' test(文件 "test" 的第三行后面添加文本 "Nihao")

sed '/the/a123' test(a 命令后面紧跟的文本会被视为新的一行的内容,而不是追加在当前行的末尾。如果你想在当前行的末尾追加文本,应该使用 

\ 来转义换行符,并在新的一行继续输入要追加的内容,或者使用 

& 来引用匹配到的模式。但在这个例子中,我们只是简单地追加了 "123" 作为新的一行。)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值