正则表达式: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那一行放末尾,迁移)
- the/{...};
:这是一个地址匹配模式,它指定了后续的动作(在 {...} 中)应该应用于哪些行。在这个例子中,动作将应用于所有包含“the”的行。
- H
:这个命令将当前模式空间(pattern space)的内容追加到保持空间(hold space)的末尾,并在保持空间的内容和新追加的内容之间添加一个换行符。如果保持空间是空的,这个命令仍然会成功执行。
- d
:这个命令删除当前模式空间的内容,并且立即开始下一个循环,读取下一行输入。由于这个命令紧跟在 H 命令之后,所以所有包含“the”的行都不会被打印出来,而是被移动到保持空间。
- $G
:这个命令在文件的最后一行(由 $ 地址匹配模式指定)执行。它将保持空间的内容追加到当前模式空间的末尾。这意味着在文件的末尾,所有之前被移动到保持空间的行(即所有包含“the”的行)将被打印出来
sed '3aNihao' test(文件 "test" 的第三行后面添加文本 "Nihao")
sed '/the/a123' test(a 命令后面紧跟的文本会被视为新的一行的内容,而不是追加在当前行的末尾。如果你想在当前行的末尾追加文本,应该使用
\ 来转义换行符,并在新的一行继续输入要追加的内容,或者使用
& 来引用匹配到的模式。但在这个例子中,我们只是简单地追加了 "123" 作为新的一行。)