Linux-2

Apr 23, 2018 09:54 · 594 words · 3 minute read Linux

学习….

目录

  • 特殊符号表
  • grep参数详解
    • 搜索特定字符串
    • 利用中括号 [] 来搜寻集合字符
    • 行首与行尾字符(^ $)
    • 任意一个字符和重复字符(.和*)
    • 限定连续搜寻的字符的范围 {}
  • sed

基础

特殊符号表

特殊符号 代表意义
[:alnum:] 代表英文大小写字符及数字,亦即 0-9, A-Z, a-z
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:blank:] 代表空格键不 [Tab] 按键两者
[:cntrl:] 代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等
[:digit:] 代表数字而已,亦即 0-9
[:graph:] 除了空格符 (空格键不 [Tab] 按键) 外的其他所有按键
[:lower:] 代表小写字符,亦即 a-z
[:print:] 代表任何可以被打印出来的字符
[:punct:] 代表标点符号 (punctuation symbol),亦即:” ‘ ? ! ; : # $…
[:upper:] 代表大写字符,亦即 A-Z
[:space:] 任何会产生空白的字符,包括空格键, [Tab], CR 等等
[:xdigit:] 代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字不字符

grep进阶的选项与参数

参数详解

[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 档案以 text 档案的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示!


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

练习

1.搜索特定字符串

cat yang.txt| grep -n 'the'

grep -n 'the' yang.txt
# 才知道grep可以直接获得文件的内容,然后进行分析

grep -vn 'the' yang.txt

2.利用中括号 [] 来搜寻集合字符

grep -n 't[ae]st' yang.txt

grep -n '[^g]oo' yang.txt

grep -n '[^a-z]oo' yang.txt

grep -n '[0-9]' yang.txt

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

grep -n '[[:digit:]]' yang.txt

3.行首与行尾字符(^ $)

行首(^)

grep -n '^the' yang.txt

grep -n '^[a-z]' yang.txt

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

grep -n '^[^a-zA-Z]' yang.txt

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

行尾($)

找出行尾为‘.’的行。
grep -n '\.$' yang.txt
找出空白行
grep -n '^$' yang.txt  

在一些配置文件中会有一些以‘#’开头的注释内容,还会有一些空白行,那么使用grep配合正则表达式来去除配置文件中注释的内容和空白行

grep -v '^#' sysctl.conf | grep -nv '^$'

错误写法

grep -v '^#' sysctl.conf | grep -nv '^$' sysctl.conf

这样写的错误之处,在于在管线命令后,我们又使用grep对sysctl.conf文件进行了文件内容的正则匹配。这样就等于说我们对于内容的处理进行了,两次,而且这两次的结果是后者覆盖前者。

然而我们想要的效果是在去除‘#‘之后,在进行去除空白行,所以直接在管线符后添加grep -nv '^$'即可,管线符的作用就是使用管线符后的命令来对前面的命令的输出结果再次进行处理。所以这里在后面的命令又添加一个文件名,就是脑子掉坑了!!!!

4.任意一个字符和重复字符(.和*)

  • 小数点(.):代表『一定有一个任意字符』的意思;
  • 星号(*):代表『重复前一个 0 到无穷多次』的意思,为组合形态

    ➜  Linux grep -n 'g..d' yang.txt
    1:"Open Source" is a good mechanism to develop programs.
    9:Oh! The soup taste good.
    16:The world <Happy> is the same with "glad".
    
    

* 代表的是『重复 0 个或多个前面的字符(前面的一个字符,不是所有的)』 因此,『o*』代表的是:『拥有空字符或一个 o 以上的字符』, 特别注意,因为允许空字符(就是有没有字符都可以的意思),因此,『 grep -n’o*’ regular_express.txt 』将会把所有的数据都打印到屏幕上!

那如果是『oo*』呢?则第一个 o 肯定必须要存在,第二个 o 则是可有可无的多个 o , 所以,凡是含有 o, oo, ooo, oooo 等等,都可以被列出来~

同理,当我们需要『至少两个 o 以上的字符串』时,就需要 ooo*

#需要两个o以上的字符
grep 'ooo*' yang.txt

grep 'g.*g' yang.txt

5.限定连续 RE 字符范围 {}

这个就是来规定前面字符出现的次数。 示例 找到出现两个 o 的字符串

grep 'o\{2\}' yang.txt

找出 g 后面接 2 到 5 个 o ,然后再接一个 g的字符串,

grep 'go\{2,5\}g' yang.txt

示例内容

"Open Source" is a good mechanism to develop programs.
apple is my favorite food.
Football game is not use feet only.
this dress doesn't fit me.
However, this dress is about $ 3183 dollars.
GNU is free air not free beer.
Her hair is very beauty.
I can't finish the test.
Oh! The soup taste good.
motorcycle is cheap than car.
This window is clear.
the symbol '*' is represented as start.
Oh!	My god!
The gd software is a library for drafting programs.
You are the best is mean you are the no. 1.
The world <Happy> is the same with "glad".
I like dog.
google is the best tools for search keyword.
goooooogle yes!
go! go! Let's go.
# I am VBird

sed

作为Linux三剑客之一,这个是要好好练习一下的。

参数详解

 sed [-nefr] [动作]
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在指令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的
-r :sed 的动作支持的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i :直接修改读取的档案内容,而不是由屏幕输出。

动作说明: [n1[,n2]]function

n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,
则『 10,20[动作行为] 』

function有以下选项

a :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
i :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
c :取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何东西;
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

练习

删除

cat -n yang| sed '2,5d'
cat -n yang| sed '2d' 
cat -n yang| sed '3,$d'

添加

cat -n yang| sed '2a yang'
cat -n yang| sed '2i yang' 
添加两行
➜  Linux cat -n yang| sed '2i yang\ 
pipe quote> hhhhahahah'

以行为单位的取代与显示

cat -n yang| sed '2,5c yang'

cat yang| sed -n '2,5p'

部分数据的搜寻与取代的功能

这里和整行的取代不同,而是具体的数据的搜寻与取代

cat yang | sed 's/root/yang/g'

只将IP取出
ip add show | grep '119' | sed 's/^.*inet//g'| sed 's/ brd.*$//g'

tweet Share