12sed命令
1、sed命令
sed [参数] "[定位] [指令]" [处理的文本路径]
注:不指定定位,则默认处理全文
指令:
p : 打印文本
d : 删除文本
参数:
-e : 允许多项编辑
-n : 取消默认输出
-i : 就地编辑文本
-r : 支持扩展正则表达式(sed中的正则表达式必须放在两个//之间)
-f : 指定定位规则的文本
案例1、在文本中打印第一行和第五行
sed -e "5p" -e "1p" 1.txt
案例2、在文本中要求只打印1、5行
sed -n -e "5p" -e "1p" 1.txt
案例3、要求删除文件的第三行
sed -i "3d" 1.txt
案例4、删除/etc/fstab文件中所有的注释的行
cp /etc/fstab 2.txt
sed -i -r "/^ *#/d" 2.txt
案例5、删除2.txt中的第二行和打印2.txt中的第五行
vim 3.txt
编进文本:如:3d、5p
sed -f 3.txt 2.txt
练习1、要求将/etc/passwd文件复制到/root/1.txt中,然后删除当中包含/sbin/nologin的行
cp /etc/passwd /root/1.txt
sed -i -r "/\/sbin\/nologin/d" 1.txt
练习2、删除/etc/nginx/nginx.conf文件中所有以#号开头的行
cp /etc/nginx/nginx.conf 3.txt
sed -ir "/^ *#/d" 3.txt
练习3、删除第三行到最后一行
nl /etc/passwd | sed "3,$ d"
2、sed + 正则表达式(定位)
1、数字
固定定位:
n : 第n行
ps: sed -n "2p" 1.txt
范围定位:
m,n : m至n行
ps: sed -n "1,3p" 1.txt
2、正则
正则表达式必须放在//之间
1、打印/etc/passwd文件中包含root行
cp /etc/passwd 3.txt
sed -n "/root/p" 3.txt
2、将包含空格的行打印出来
cp /etc/passwd 3.txt
sed -rn "/ +/p" 3.txt
3、数字加正则
正则匹配是非贪婪性匹配
贪婪性是匹配到了之后,不停止匹配,直至文件所有的内容全部匹配完毕
非贪婪性匹配,一旦匹配到了就停止匹配
1、在/etc/passwd文件中的第一行到包含test的行,全部删除
cp /etc/passwd 3.txt
sed -r "1,/test/d" 3.txt
2、删除从包含root的行到第五行的内容
cp /etc/passwd 3.txt
sed -r "/root/,5d" 3.txt
3、从包含root的行删除到包含ftp的行
cp /etc/passwd 3.txt
sed -r "/root/,/ftp/d" 3.txt
4、\c与c分隔符
\c与c只是一个代表,其中c可以换成任意一个字符
练习1、要求将/etc/passwd文件复制到/root/1.txt中,然后删除当中包含/sbin/nologin的行
cp /etc/passwd /root/1.txt
sed -ir "\#/sbin/nologin#d" 1.txt
3、sed的常用指令
a : 在当前行后添加一行或多行内容
c : 用新文件修改(替换)当前行的文本
d : 删除文本
i : 在当前行之上另起一行插入文本
p : 打印文本
r : 从以外文件中读相关内容,写到相关行之后
w : 匹配到的行写入一个新的文件中
y : 将字符转换成一个新的字符(单字符替换)
s : 用一个字符整体替换成一个字符
s指令替换对于行来说,是非贪婪性的,如果需要全局替换,则需要使用g
g : 全局执行(必须在后面)
i : 配合s指令一起使用时,则是忽略大小写的作用
案例1、在第二行之后添加一行
sed "2a xxxxxxxxx" 1.txt
案例2、替换第三行
sed "3c xxxxxxx" 3.txt
案例3、在/etc/passwd文件中增加1到3行之前插入helloworld
cp /etc/passwd /root/1.txt
sed "1,3i helloworld" 1.txt
案例4、从5.txt文本中读取内容写入/etc/passwd前5行之后
cp /etc/passwd 1.txt
sed "1,5r 5.txt" 1.txt
案例5、将/etc/passwd中前5行的内容写入(覆盖)到6.txt中
sed "1,5w 6.txt" /etc/passwd
案例6、将/etc/passwd中的1至5行的sbin换成1234
sed "1,5y/sbin/1234/" /etc/passwd
sbin ---> 1234
s ---> 1
b ---> 2
i ---> 3
n ---> 4
案例7、将/etc/passwd中的1至5行的sbin换成1234
sed "s/sbin/1234/g" /etc/passwd
练习1、替换/etc/passwd中的root为ROOT
sed "s/root/ROOT/g" /etc/passwd
练习2、将模板机(192.168.15.200)中的ip替换成192.168.15.50
sed "s/\.200/\.50/g" /etc/passwd
练习3、删除/etc/passwd中的所有奇数行
sed -i "1~2d" /etc/passwd
练习4、在每一行的行首增加#号
sed "s/^ */#/g" 1.txt
练习5、将Hello World替换成World Hello
sed -r "s/(Hello)(World)/\2\1/g" 3.txt
练习6、将1.txt中的每一行都添加一个.bak的后缀
sed -r "s/(.*)/\1\.bak/g" 1.txt
知识储备:
奇数行:1~2
偶数行:2~2