sed

非交互式:不用打开文件就可以直接修改文件
sed -i ‘s/old/new/g’ file_name : 正式修改
SED是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑,标准输入可以来自键盘输入、文本重定向、字符串、变量,甚至来自于管道的文本,与VIM编辑器类似,它一次处理一行内容,Sed可以编辑一个或多个文件,简化对文件的反复操作、编写转换程序等。
在处理文本时把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),紧接着用SED命令处理缓冲区中的内容,处理完成后把缓冲区的内容输出至屏幕或者写入文件。
逐行处理直到文件末尾,然而如果打印在屏幕上,实质文件内容并没有改变,除非你使用重定向存储输出或者写入文件。其语法参数格式为:

sed [-Options] [‘Commands’] filename
sed工具默认处理文本,文本内容输出屏幕已经修改,但是文件内容其实没有修改,需要加-i参数即对文件彻底修改;
x #x为指定行号;
x,y #指定从x到y的行号范围;
/pattern/ #查询包含模式的行;
/pattern/pattern/ #查询包含两个模式的行;
/pattern/,x #从与pattern的匹配行到x号行之间的行;
x,/pattern/ #从x号行到与pattern的匹配行之间的行;
x,y! #查询不包括x和y行号的行;
r #从另一个文件中读文件;
w #将文本写入到一个文件;
y #变换字符;
q #第一个模式匹配完成后退出;
l #显示与八进制ASCII码等价的控制字符;
{} #在定位行执行的命令组;
p #打印匹配行;
= #打印文件行号;
a\ #在定位行号之后追加文本信息;
i\ #在定位行号之前插入文本信息;
d #删除定位行;
c\ #用新文本替换定位文本;
s #使用替换模式替换相应模式;
n #读取下一个输入行,用下一个命令处理新的行;
N #将当前读入行的下一行读取到当前的模式空间。

常用sed案列:
1、替换1.txt文本中old为new

sed 's/old/new/g' 1.txt

2、打印1.txt文本第一行至第三行

sed -n '1,3p' 1.txt

3、打印1.txt文本中第一行与最后一行

sed -n '1p;$p' 1.txt

4、删除1.txt第一行至第三行、删除匹配行至最后一行

sed '1,3d' 1.txt
sed '/abc/,$d' 1.txt

5、删除1.txt最后6行及删除最后一行

for i in `seq 1 6`;do sed -i '$d' 1.txt ;done

6、删除1.txt最后1行

sed '$d' 1.txt

7、在1.txt查找abc所在行,并在其下一行添加word字符,a表示在其下一行添加字符串:

sed '/abc/aword' 1.txt
在1.txt查找abc所在行,并在其上一行添加word字符,i表示在其上一行添加字符串:
sed '/abc/iword' 1.txt
在1.txt查找以test结尾的行尾添加字符串word,$表示结尾标识,&在Sed中表示添加:
sed 's/test$/&word/g' 1.txt
在1.txt查找www的行,在其行首添加字符串word,^表示起始标识,&在Sed中表示添加:
sed '/www/s/^/&word/' 1.txt
多个sed命令组合,使用-e参数
sed -e '/www.test.com/s/^/&1./' -e 's/www.test.com$/&./g' 1.txt
多个sed命令组合,使用分号“;”分割
sed -e '/www.test.com/s/^/&1./;s/www.test.com$/&./g' 1.txt
Sed读取系统变量,变量替换
WEBSITE=WWW.abc.NET
Sed “s/www.test.com/$WEBSITE/g” 1.txt
修改Selinux策略enforcing为disabled,查找/SELINUX/行,然后将其行enforcing值改成disabled、!s表示不包括SELINUX行
sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config
sed -i '/SELINUX/!s/enforcing/disabled/g' /etc/selinux/config

8、替换IP地址:

sed -i ‘/IPADDR/s/100/200/g’ /etc/sysconfig/network-scripts/ifcfg-eth0
合并上下两行,也即两行合并
sed 'N;s/\n/ /' 1.txt
示例:把cat内容前面加个编号,后面加个.
最终结果:
方法一 cat -n file.txt
cat -n passwd | sed -e 's/ //g' -e 's/\t/) /g' -e 's/$/./g'
去掉空格:sed ‘s/ //g’
去掉tab键(\t表示tab):sed ‘s/\t//g’
在每行未加点号:sed ‘s/$/&./g’ # &表示插入,可以不写
方法二 grep –n ‘’ file.txt
grep –n ‘’ 文件名 #显示行号
sed ‘s/://1’ # 1只替换第一个
方法三 sed = file.txt
sed默认是一行一行处理,如果2行同时处理在s前面加个大写的N
sed ‘N;s/\n/) /g’
3行处理,再前面再加个大写N;: sed ‘N;N;s/\n/) /g’
方法四 for循环
sed里调用变量使用双引号
示例 匹配某一行后替换对应的内容
如:匹配deamon这一行后,把sbin替换为bin
sed ‘/匹配某行/s/旧/新/g’ file.txt
反向匹配在s前面加一个叹号!,除deamon这行,其他行都替换
sed ‘/匹配某行/!s/旧/新/g’ file.txt
范围匹配:sed -n '/开始/,/结束/'p file.txt
匹配到最后一行:sed -n '/开始/,$'p file.txt
多行合并,前面加N; 换行符\n
换行符替换成空格(给for循环用)
sed ':a;N;$!ba;s/\n/ /g'

 

posted @ 2022-10-11 08:53  此生逍遥py  阅读(99)  评论(0)    收藏  举报