sed命令的用法
sed命令的详细学习:
Sed的常用选项:
-n:只显示sed匹配到的行。其余行不显示。
-i :可以直接操作原文件。默认情况下sed不会改变原文件,但是-i选项可以修改原文件,此选项应慎用。
-r:可以使用标准正则表达式。默认情况下sed只支持基本正则表达式,但是加上-r选项后则支持扩展正则表达式
-e:多脚本共用。可以同时执行多个命令。
常见的用法(格式):
替换操作:s命令
sed -e 's/原来的内容/要替换的内容/g' 文件名
在每行的头添加字符,比如"HEAD",命令如下:
sed 's/^/HEAD&/g' test.file
在每行的行尾添加字符,比如“TAIL”,命令如下:
1."^"代表行首,"$"代表行尾
sed -n 's/root/ROOT/p' sed.txt sed替换结合-n选项和p命令,只显示改动过的行
sed
-i
'$a\要插入的文字'
file
.txt 在文件的结尾插入一行文字
sed -e 's/^/#/g' php_install.sh 将 每行开头都添加上#号
删除操作:d命令
1.删除空白行
sed '/^$/d' passwd.txt == sed -i '/^$/d' passwd.txt
sed -e '/^$/'d passwd.txt(d放‘ ’外边也可以)
sed -e '/^$/d' passwd.txt
(cat passwd.txt|grep -v "^$")此命令也可以
2.删除文件第二行
sed -e '2d' passwd.txt
3.删除文件第3行到末尾(包括第三行)
sed -e '3,$d' passwd.txt
sed -i '2,$d' x.txt
4.删除文件的最后一行
sed -e '$d' passwd.txt
5.删除文件中所有以oldboy开头的行
sed -e '/^oldboy/'d passwd.txt
6.删除文件中所有以nologin结尾的行
sed -e '/nologin$/'d passwd.txt
7.删除文件中以o开头的行
sed -e '/^o,*/d' passwd.txt
8.删除文件中以n结尾的行
sed -e '/n,*$/d' passwd.txt
9.删除第1行到第44行
sed -e '1,44d' passwd.txt
sed命令升华:
来自: http://man.linuxde.net/sed
来自: http://man.linuxde.net/se
已匹配字符串标记&
正则表达式\w匹配每一个字母,使用&替换它,&对应之前所匹配到的字母。
echo "thisisatestline"|sed 's/\w/& /g'
t h i s i s a t e s t l i n e
正则表达式\w\+匹配每一个单词,使用&替换它,&对应之前所匹配到的单词。
echo "this is a test line"|sed 's/\w\+/& /g'
this is a test line
echo "this is a test line"|sed 's/\w\+/[&]/g'
[this] [is] [a] [test] [line]
附加方法:
echo "asdfghjkl"|sed -e 's/\(.\)/\1 /g'
将每个单词都加上双引号
echo this is a test line|sed 's/\w\+/“&”/g'
“this” “is” “a” “test” “line”
在以root开头的
sed -e 's/^root/&_localhost/g' passwd.txt |grep root
root_localhost:x:0:0:root:/root:/bin/bash
11.sed 命令分组匹配分隔
解释:\(.\) 里面有几个点就是已几个字符为一组
\1#:这个就是1后面是什么就以什么为分隔符
以每个字符为分隔后面加上空格
[root@www ~]# echo "asdfghjklqwertyuiopzxvcbnm"|sed 's/\(.\)/\1 /g'
a s d f g h j k l q w e r t y u i o p z x v c b n m
以每2个字符为分隔后面加上空格
[root@www ~]# echo "asdfghjklqwertyuiopzxvcbnm"|sed 's/\(..\)/\1 /g'
as df gh jk lq we rt yu io pz xv cb nm
以每3个字符为分隔后面加上空格
[root@www ~]# echo "asdfghjklqwertyuiopzxvcbnm"|sed 's/\(...\)/\1 /g'
asd fgh jkl qwe rty uio pzx vcb nm
以#号为分隔符分隔每个字符
echo "asdfghjklqwertyuiopzxvcbnm"|sed 's/\(.\)/\1#/g'
a#s#d#f#g#h#j#k#l#q#w#e#r#t#y#u#i#o#p#z#x#v#c#b#n#m#
以空格为分隔符按照4242的方式分隔
ed -e 's/\(....\)\(..\)/\1 \2 /g' sed.txt|head -n1
root :x :0:0 :r oot: /r oot: /b in/b as h
12.子串匹配标记\1
echo aaa BBB|sed 's/\([a-z]\+\)/\1/'
aaa BBB
echo aaa BBB|sed 's/\([a-z]\+\) \([A-Z]\+\)/\1/'
aaa
echo aaa BBB|sed 's/\([a-z]\+\) \([A-Z]\+\)/\1 \2/'
aaa BBB
echo aaa BBB|sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'
BBB aaa
13.
14.
15.
16.
17.
18.
19.
20.