shell三剑客
一、Sed命令
1.Introduce
- sed是一种流编辑器,它一次处理一行内容;
- 处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕;
- 接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出;
2.基本语法
- 语法格式:
sed [options] '{command}[flags] [filename]
options
:-e
:表示用指定命令或者脚本来处理输入的文本文件;-f scriptfile
:表示用指定的脚本文件来处理输入的文件文件;-n
:抑制自动输出,仅表示处理后的结果;-i
:直接编辑文本文件;
- 内部命令:
a
:增加,在当前行下面增加一行指定内容;c
:替换,将选定行替换为指定内容;d
:删除,删除选定的行;i
:插入,在选定行上面插入一行指定内容;p
:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容,如果又非打印字符,则以ASCLL码输出。通常与“-n”选项一起使用;s
:替换,替换指定字符;y
:字符转换;
- 标志:
- 数字:新文本替换的模式;
g
:用新文本替换现有文本的全部实例;w filename
:将替换的结果写入文件;
实操案例
在指定行下面追加内容:
要求:在文本第二到四行每行后新开一行追加数据:
damn!
命令:sed '2,4a\damn!' sed.txt
Attention:若不加数字则代表对所有行进行操作;在匹配字符串的行下/上面追加内容:
要求:找到包含
"3 the"
的行,在其后/前新开一行追加内容:damn!
命令:sed '/3 the/a\damn!' sed.txt
`sed '/3 the/i\damn!' sed.txt`
在指定行进行部分内容替换:
要求:将文本中第二到第四行的第一个dog替换为cat;
命令:sed '2,4s/dog/cat/' sed.txt
Attention:
①如果要将指定行的所有匹配字符进行替换,需改成:sed '2,4s/dog/cat/g' sed.txt
*②如果要将指定行的第二个匹配字符进行替换,需改成:sed '2,4s/dog/cat/2' sed.txt
在匹配字符串的行进行部分内容替换:
要求:将包含字符串”3 the”的行中的dog替换为cat;
命令:sed '/3 the/s/dog/cat/ sed.txt
Attention:同上;在指定行进行全部内容替换:
要求:将文本的第二到四行更改为:
damn!
命令:sed '2,4c\damn!' sed.txt
Attention:这里是将三行全部内容替换成一行damn!
;在匹配字符串的行进行全部内容替换:
要求:将文件中包含”3 the”的行内容更改为:
damn!
命令:sed '/3 the/c\damn!' sed.txt
Attention:这里是将每一个匹配的行分别替换成一行damn!
;将行中匹配的内容进行对应替换:
要求:将文本中所有的
a b c
字符替换成A B C
命令:sed 'y/abc/ABC/' sed.txt
Attention:这里会将一行中所有的匹配的字符全部进行转换;删除指定行:
要求:删除文件2到4行
命令:sed '2,4d' sed.txt
打印文件指定行:
要求:打印文件第2到4行/打印文件包含
3 the
的行
命令:sed -n '2,4p' sed.txt
命令:sed -n '/3 the/p' sed.txt
Attention:如果不加-n
则会将文本中所有内容都打印一遍;在命令行中使用多个命令:
要求:将
brown
替换为green
,dog
替换为cat
命令:sed -e 's/brown/green/;s/dog/cat/' sed.txt
Attention:若要一次使用某个文件中的全部命令,也可以使用sed -f commands.txt sed.txt
修改源文件:
要求:将源文件的
brown
替换为green
,dog
替换为cat
命令:sed -i.bak 's/brown/green/;s/dog/cat/' sed.txt
Attention:在修改源文件的同时会先备份一个以.bak结尾的源文件,然后再进行修改操作;将修改的内容存入其他文件:
要求:将源文件的
cat
替换为dog
,并存入文件new.txt
命令:sed 's/cat/dog/w new.txt' sed.txt
二、grep命令
1.introcude
3.实操案例
搜索包含指定字符的行:
要求:从文件中搜索包含
"L"
字符的行
命令:grep "L" gerp.txt
Attention:
①搜索以i
开头的行(不区分大小写):grep "i" grep.txt -i -n -o
②-i
表示不区分大小;-n
表示输出前加上行号;-o
表示只输出匹配字符,且每个字符单独成行显示符合条件的行之前(后)的内容:
要求:从文件中搜索包含
"L"
字符的行,并显示其之前(后)的2行
命令:grep "L" grep.txt -B(A)2
Attention:grep "L" grep.txt -C2
可以显示其前后2行只统计符合条件的行数:
要求:从文件中统计包含
teacher
的行数
命令:grep 'teacher' grep.txt -c