shell脚本--文本处理三剑客之sed文件以及文件内容操作

一。利用sed输出特定内容

                                    查询命令对照表
查询命令                              含义

1p                                打印第1行内容
1,10p                            打印1到10行的内容
1,+5p                            打印第1行到6行的内容
/pattern1/p                       打印匹配到的pattern1的内容
/pattern1/,/pattern2/p            打印匹配到pattern1的行直到匹配到pattern2的所有行内容
/pattern1/,10p                   打印匹配到pattern1的行到10行的所有内容
10,/pattern1/p                   打印第10行直到匹配到pattern1的所有内容

示例:

$ sed 'p' sed.txt 
i love python
i love python
I love PYTHON
I love PYTHON
 
 
hoodep
hoodep
 
-n 只打印匹配模式
$sed -n 'p' sed.txt 
i love python
I love PYTHON
 
hoodep

二。利用sed删除特定内容

                                    删除命令对照表
查询命令                              含义

1d                                删除第1行内容
1,10d                            删除1到10行的内容
1,+5d                            删除第1行到6行的内容
/pattern1/d                       删除匹配到的pattern1的内容
/pattern1/,/pattern2/d            删除匹配到pattern1的行直到匹配到pattern2的所有行内容
/pattern1/,10d                   删除匹配到pattern1的行到10行的所有内容
10,/pattern1/d                   删除第10行直到匹配到pattern1的所有内容

 示例:

不会对源文件进行删除
$ sed -n '1d'  passwd
 
修改源文件删除第一行
$ sed -i  '1d'  passwd

删除第一行到第三行 
$ sed -i '1,3d' passwd 

删除不能登录的用户 匹配/sbin/nologin
$ sed -i '/\/sbin\/nologin/d' passwd 

删除 nologin和mail 之间的行
$ sed -i '/^nologin/,/^mail/d' passwd 

三。追加命令

                                  后追加命令对照表
查询命令                              含义
1a                                第1行内容前追加
1,10a                            1到10行的内容前追加
1,+5a                            第1行到6行的内容前追加
/pattern1/a                       匹配到的pattern1的内容前追加
/pattern1/,/pattern2/a            匹配到pattern1的行直到匹配到pattern2的所有行内容前追加
/pattern1/,10a                   匹配到pattern1的行到10行的所有内容前追加
10,/pattern1/a                   第10行直到匹配到pattern1的所有内容前追加



                                 前追加命令对照表
查询命令                              含义
1a                                第1行内容前追加
1,10a                            1到10行的内容前追加
1,+5a                            第1行到6行的内容前追加
/pattern1/a                       匹配到的pattern1的内容前追加
/pattern1/,/pattern2/a            匹配到pattern1的行直到匹配到pattern2的所有行内容前追加
/pattern1/,10a                   匹配到pattern1的行到10行的所有内容前追加
10,/pattern1/a                   第10行直到匹配到pattern1的所有内容前追加

  示例:

$ sed -i '/\/home1\/yinxiong/a This is user which can login to system' passwd
将list文件中内容追加到 passwd 匹配行中
$ sed -i '/root/r list' passwd


将符合条件的行保存包aa文件中 
$ sed -n "/yinxiong/w aa" passwd 

 四。修改命令

                                命令对照表
                       s/old/new              将第一行的old替换为new
                       s/old/new/g            将行内全部的old替换为new
修改                   s/old/new/2g           将行内的从第2个开始到最后old替换为new
                       s/old/new/ig           将行内old全部替换为new ,忽略大小写

  示例:

将小写的 bin/bash 替换为BIN/BASH
$ sed -i 's/\/bin/bash/\BIN\/BASH/g' passwd


使用&符号获取old值 将匹配到的 had..p/&s 替换为 had..ps , &符号只能进行整个符号计算
$ sed -i 's/had..p/&s/g' str.txt


使用\1的代替&的时候需要将 被代替的文字用 () 括起来 括号需要转义
$ sed -i 's/\(had..p\)/\1s/g' str.txt


替换hadXXXXX为hadoop 
$ sed -i 's/\(had\)...../\1doop/g' str.txt


匹配模式中存在变量,则建议使用双引号
#!/bin/bash
old_str=hadoop
new_str=HADOOP
sed -i "s/$old_str/$new_str/g" str.txt


sed中需要引入自定义变量时,如果外面使用的是单引号,则自定义变量也必须使用单引号
#!/bin/bash
old_str=hadoop
new_str=HADOOP
sed -i 's/'$old_str'/'$new_str'/g' str.txt
原创文章 33 获赞 38 访问量 2万+

猜你喜欢

转载自blog.csdn.net/ChaoLi_Chen/article/details/105747681