shell三剑客-----------SED

目录

 shell编程--SED

语法与参数

具体使用实例

在指定行后面追加内容

取消与添加注释

匹配字符串(追加|插入)

文件内容修改操作—替换,将一行中匹配的内容替换为新的数据,使用命令c

文件内容删除,将文件中的指定数据删除,使用命令d

文件内容查看,将文件内容输出到屏幕,使用命令p

使用正则表达式 -r

sed小技巧


 shell编程--SED

非交互式编辑器,一次处理一行内容。(流文本编辑器)

语法与参数

 sed [options] '{command}[flags]' [filename]    
 # 中括号内容必有 大括号内容可有可无
 sed  # 执行命令
 [options]  # 命令选项
 {command}[flags]    # sed内部选项和参数
 [filename]     # 文件
 命令选项
 -e script 将脚本中指定的命令添加到处理输入时执行的命令中,  多条件,一行中要有多个操作
 -f script 将文件中指定的命令添加到处理输入时执行的命令中
 -n        抑制自动输出
 -i        编辑文件内容
 -i.bak    修改时同时创建.bak备份文件。
 -r        使用扩展的正则表达式
 !         取反 (跟在模式条件后与shell有所区别)
 ​
 sed常用内部命令
 a   在匹配后面添加
 i   在匹配前面添加
 p   打印
 d   删除
 s   查找替换
 c   更改
 y   转换   N D P 
 ​
 flags
 数字             表示新文本替换的模式
 g:             表示用新文本替换现有文本的全部实例
 p:             表示打印原始的内容
 w filename:     将替换的结果写入文件
 ​

具体使用实例

在指定行后面追加内容
 #在第三行和第六行后新开一行添加nihao world
 sed -i -e '3a\nihao world' -e '6a\nihao world'  file 
 #在第三行到第六行后新开一行添加nihao world
 sed -i  '3,6a\nihao world' file
 #在第三行到第六行之前插入nihao world
 sed -i '3,6i\nihao world' file
 #在第三行和第六行末尾添加nihao world
 sed -i '3,6s/$/nihao world/' file
取消与添加注释
 #取消file文件里“#nihao world”的注释
 sed -i "/^#nihao world/s/^#//"  file
 #为file文件里“nihao world”添加注释
 sed -i "/nihao world/s/^/#/"    file
匹配字符串(追加|插入)
 追加
 #找到“5 root”的行,在其后新开一行追加“nihao world”
 sed -i '/5 root/a\nihao world' file
 ​
 插入
 #找到“5 root”的行,在其前新开一行插入“nihao world”
 sed -i '/5 root/i\nihao world' file 
文件内容修改操作—替换,将一行中匹配的内容替换为新的数据,使用命令c
 语法 sed -i 's/新内容/旧内容/g' file
 #匹配行整行的替换
 将1到3行的内容替换为nihao world
 sed -i '1,3c'\nihao world file
 #匹配字符串所在行整行的替换
 将file文件中包含“sbin”的行的内容替换为“nihao world”
 sed -i '/sbin/c\nihao world' file
文件内容删除,将文件中的指定数据删除,使用命令d
 #删除file文件中的第4到第7行
 sed -i '4,7d' file
 #删除file文件中的root
 sed -i /root/d file
文件内容查看,将文件内容输出到屏幕,使用命令p
 #打印file的内容
 sed -n 'p' file
 #打印file文件里的4到6行
 sed -n '4,6p' file
 #打印file文件里的第4行与第7行
 sed -n '4p;7p' file
 #打印file文件包含root的行
 sed -n /root/p file
使用正则表达式 -r
 打印file中以字符串"3 the"开头的行内容
 sed -n -r /^(3 the)/p file
说明:在正则表达式中如果出现特殊字符(^$.*/[]),需要以前导 “\” 号做转义

sed小技巧

 统计file有多少行
 [root@jiangnan ~]# sed -n '$=' file
 打印file内容时加上行号
 [root@jiangnan ~]# sed  '=' file
 输出包含the的所在行的行号(= 用来输出行号)
 [root@jiangnan ~]# sed -n '/the/=' test.txt 
 ​
 输出以PI开头的行
 [root@jiangnan ~]# sed -n '/^PI/p' test.txt 
 ​
 输出以数字结尾的行
 [root@jiangnan ~]# sed -n '/[0-9]$/p' test.txt 
 ​
 输出包含单词wood的行 \< ,\>表示单词边界
 [root@jiangnan ~]# sed -n '/\/p' test.txt 
 a wood cross!
 ​
 每行开始添加#字符   
 [root@jiangnan ~]# sed 's/^/#/' test.txt 
 ​
 在包含the的每行行首添加#字符
 [root@jiangnan ~]# sed '/the/s/^/#/' test.txt 
 ​
 在每行末尾添加EOF字符
 [root@jiangnan ~]# sed 's/$/EOF/' test.txt 
 ​
 将3-5行所有的the替换为THE       
 [root@jiangnan ~]# sed '3,5s/the/THE/g' test.txt 
 ​
 将包含the的行中的o替换为O 
 [root@jiangnan ~]# sed '/the/s/o/O/g' test.txt 
 ​
 迁移符合条件的文本
 H 复制到剪贴板;
 g,G 将剪贴板中的数据覆盖/追加到指定行;
 w保存为文件;
 r读取指定文件;
 a 追加指定内容
 ​
 将包含the的行迁移到行尾(;用于多个操作)
 ​
 H复制到剪贴板---d删除---$G追加到行尾
 [root@jiangnan ~]# sed '/the/{H;d};$G' test.txt 
 ​
 将1-5行迁移到17行后
 [root@jiangnan ~]# sed '1,5{H;d};17G' test.txt 
 ​
 将包含the的行另存为新文件
 [root@jiangnan ~]# sed '/the/w out.file' test.txt 
 ​
 [root@jiangnan ~]# ls
 ​
 anaconda-ks.cfg  out.file  test.txt  :wq
 ​
 [root@jiangnan ~]# cat out.file 
 ​
 在包含the每行后添加文件hostname内容
 [root@jiangnan ~]# sed '/the/r /etc/hostname' test.txt 
 ​
 在第3行后插入新行,内容为New
 [root@jiangnan ~]# sed '3aNew' test.txt 
 ​
 在包含the的每行后插入新行      
 [root@jiangnan ~]# sed '/the/aNew' test.txt 
 ​
 在第3行后插入多行(\n 换行符)
 [root@jiangnan ~]# sed '3aNew1\nNew2' test.txt 
 ngnan ~]# sed '1,5{H;d};17G' test.txt 
 ​
 将包含the的行另存为新文件
 [root@jiangnan ~]# sed '/the/w out.file' test.txt 
 ​
 [root@jiangnan ~]# ls
 ​
 anaconda-ks.cfg  out.file  test.txt  :wq
 ​
 [root@jiangnan ~]# cat out.file 
 ​
 在包含the每行后添加文件hostname内容
 [root@jiangnan ~]# sed '/the/r /etc/hostname' test.txt 
 ​
 在第3行后插入新行,内容为New
 [root@jiangnan ~]# sed '3aNew' test.txt 
 ​
 在包含the的每行后插入新行      
 [root@jiangnan ~]# sed '/the/aNew' test.txt 
 ​
 在第3行后插入多行(\n 换行符)
 [root@jiangnan ~]# sed '3aNew1\nNew2' test.txt 

你可能感兴趣的:(linux,运维,服务器,sed)