1、定位
定位一行
x:行号
sed -n '10p' passwd
nl passwd | sed -n '10p'
/pattern/:正则
sed -n '/abc/p' passwd
[root@idtp4 test]# nl -ba passwd |sed -n '/root/p' 1 root:x:0:0:root:/root:/bin/bash 11 operator:x:11:0:operator:/root:/sbin/nologin [root@idtp4 test]#
定位几行
x,y:行号
nl passed | sed -n '10,20p'
/pattern/,x:正则
sed -n '/mail/,/abc/p' passwd
x,y!:不选择这一行
nl passwd |sed -n '10!p'
nl passwd | sed -n '10,20!p'
间隔几行
first~step
first:开始行
step:步进
nl passwd | sed -n '1~2p'
二、基本操作命令
-a(追加行)/i(插入行)
-c(替代行)
-d(删除行)
$a:在文件末尾追加内容
#在环境变量末尾追加内容 # 为换行 [root@idtp4 test]# sed -i '$a export LRX_HOME= export path=' profile [root@idtp4 test]# tail -5f profile export PATH=$PATH:$ACCUMULO_HOME/bin export ANT_HOME=/software/apache-ant-1.9.13/bootstrap export PATH=$PATH:$ANT_HOME/bin export LRX_HOME= export path=
如果想在添加的内容开头加空格,就要在$a后加入转义符“”。
#添加空格对齐 [root@idtp4 test]# sed -i '$a export LRX_HOME export path' profile [root@idtp4 test]# tail -5f profile export PATH=$PATH:$ACCUMULO_HOME/bin export ANT_HOME=/software/apache-ant-1.9.13/bootstrap export PATH=$PATH:$ANT_HOME/bin export LRX_HOME export path
三、常用命令
删除空行
sed '/^$/d' filename
替换操作
s
分隔符:/
全局替换:g
sed 's/nologin/login/' passwd sed 's/:/%/g' passwd
打印时用-n 和p。
替换时用s 和g(全局)。
转换大小写
u l:对首字母转大写、小写
U L:对一串字符转大写、小写
sed 's/^[a-z-_]+/u&/' passwd
#将文件夹下的.txt文件名转换为大写 ls *.txt | sed 's/^w+/U&/'
其中,&表示替换前的全部内容。
[root@idtp4 test]# ls |sed 's/.*/u&/' 123.txt Abc.txt Access_log Passwd Profile Test.txt [root@idtp4 test]# ls |sed 's/.*/U&/' 123.TXT ABC.TXT ACCESS_LOG PASSWD PROFILE TEST.TXT [root@idtp4 test]# ls |sed 's/.*/l&/' 123.txt abc.txt access_log passwd profile test.txt
四、括号
()
- 括号代表指代内容,可以用1,2指代括号里的内容。
- 括号要转义,前面要加转义符。
文件里有:w1w2w3的内容,要取w2,可以写为:
sed 's/w1(w2)w3/1/'
结果为w2。
# 取到第一个ip [root@idtp4 test]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.166.190 netmask 255.255.240.0 broadcast 172.17.175.255 ether 00:16:3e:0e:a4:48 txqueuelen 1000 (Ethernet) [root@idtp4 test]# ifconfig|sed -n '/inet.*bro/p' |sed 's/inet+s([0-9.]+).snet.*$/1/' 172.17.166.190
也可以写成:
# 取到第一个ip [root@idtp4 test]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.166.190 netmask 255.255.240.0 broadcast 172.17.175.255 ether 00:16:3e:0e:a4:48 txqueuelen 1000 (Ethernet) [root@idtp4 test]# ifconfig|sed -n '/inet.*bro/p'|sed 's/inet.*s([0-9.]+).*netmask.*s([0-9.]+).*broadcast.*s([0-9.])/3/' 172.17.175.255
[ ]
- 表示从里面取任意值。
#0到9中任意的值,包含点,点需要转义
[0-9.]
#a到z的任意值,包含-,以括号里面的值开头,a到z是连续的,连续的用短线连接,结束连续后面要先接下划线,再接短线
^[a-z_-]
+:表示1个以上。
^:表示开头。
$:表示结束。
&:表示替换前的全部内容。
{}:同时执行多个sed命令。
#取passwd里的用户名,uid,gid [root@idtp4 test]# sed 's/([a-z_-]+):x:([0-9]+):([0-9]+):.*$/1,2,3/' passwd root,0,0 bin,1,1 daemon,2,2
五、r和w
r:读,不会改变文件内容
w:写,会改变文件内容,覆盖写
[root@idtp4 test]# cat 123.txt 123 456 789 [root@idtp4 test]# cat abc.txt abc qwe sd #将读取123.txt内容,并加入到abc.txt的第一行后面,不改变文件内容 [root@idtp4 test]# sed '1r 123.txt' abc.txt abc 123 456 789 qwe sd [root@idtp4 test]# cat 123.txt 123 456 789 [root@idtp4 test]# cat abc.txt abc qwe sd
[root@idtp4 test]# cat 123.txt 123 456 789 [root@idtp4 test]# cat abc.txt abc qwe sd #将abc.txt的第一行写入到123.txt里,覆盖写 [root@idtp4 test]# sed '1w 123.txt' abc.txt abc qwe sd [root@idtp4 test]# cat 123.txt abc [root@idtp4 test]# cat abc.txt abc qwe sd
q:退出
#打印到第10行,退出 [root@idtp4 test]# nl -ba passwd |sed '10q' 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 7 sync:x:5:0:sync:/sbin:/bin/sync 8 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 9 halt:x:7:0:halt:/sbin:/sbin/halt 10 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin [root@idtp4 test]#
六、命令行格式
-i:修改文件内容
-n:忽略默认输出
[root@idtp4 test]# nl -ba passwd|sed -n '10p' 10 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin [root@idtp4 test]#
-e:跟{}一样,可以同时写入多个命令
#删除2到3行,同时将冒号替换为%号 [root@idtp4 test]# nl -ba passwd |sed -e '10,20d' -e 's/:/%/g' 1 root%x%0%0%root%/root%/bin/bash 4 bin%x%1%1%bin%/bin%/sbin/nologin 5 daemon%x%2%2%daemon%/sbin%/sbin/nologin 6 adm%x%3%4%adm%/var/adm%/sbin/nologin 7 lp%x%4%7%lp%/var/spool/lpd%/sbin/nologin [root@idtp4 test]#
七、脚本格式
sed -f scriptfile file