sed学习
1、打印第n行,n为任意整数
sed -n 'np' /etc/passwd
2、打印第2行到第4行的内容
sed -n '2,4p' /etc/passwd
3、打印匹配某字符的内容
sed -n '/root/p' /etc/passwd
4、n+匹配字符串,意思为从第n行开始直到找到匹配的字符串,中间的全部打印出来。
sed -n 'n,/root/p' /etc/passwd
5、匹配元字符,必须使用反斜线\屏蔽其特殊含义。
sed -n '/\$/p' /etc/passwd
6、显示整个文件内容
sed -n '1,$p' /etc/passwd
7、匹配任意字母,打印含有“字母”的行
sed -n '/.*sh/p' /etc/passwd 打印所有含有sh字符串的行
sed -n '/.*sh$/p' /etc/passwd 打印尾字母为sh的行
8、打印首行或者末行
sed -n '1p' /etc/passwd
sed -n '$p' /etc/passwd
9、只打印行号
sed -n '/.*sh/=' /etc/passwd
10、打印匹配行并打印行号
sed -n -e '/.*sh/p' -e '/.*sh/=' /etc/passwd
11、插入一行,在sync下一行插入用a\,上一行插入用i\。其中匹配字符串也可以用行号来表示。
sed "/sync/a\my name is aaa" /etc/passwd 下一行
sed "/sync/i\my name is aaa" /etc/passwd 上一行
插入多行
sed "/sync/a\my name is aaa \naaa is me" /etc/passwd 下一行
sed "/sync/i\my name is aaa \naaa is me" /etc/passwd 上一行
sed脚本格式
#!/bin/sed -f
#insert.sh
/sync/ a\
myname is aaa \naaa is me
保存退出。赋予执行权限。./insert.sh /etc/passwd
12、替换某行。
sed "/sync/c\myname is bbb" /etc/passwd 替换其中含有sync的字符串
脚本格式
#!/bin/sed -f
#replace.sh
/sync/ c\
myname is bbb
4 c\
aaa is ccc
保存退出,赋予执行权限。./replace.sh /etc/passwd
13、删除文本
删除第1行 sed '1d' /etc/passwd
删除2-4行 sed '2,4d' /etc/passwd
删除末行 sed '$d' /etc/passwd
删除匹配行 sed '/sync/d' /etc/passwd
删除空行 sed '/^$/d' /etc/passwd
替换某字符串 sed 's/sync/ddd/' /etc/passwd 只替换每行出现的第一个匹配字符串
sed 's/sync/ddd/g' /etc/passwd 替换所有的匹配字符串
删除字符串 sed 's/\///' /etc/passwd 删除每行出现的第一个元字符/元字符,如果要全部删除,后面加g参数。
sed 's/.*bash$//g' /etc/passwd 删除所有以bash结尾的行
sed 's/^root.*//g' passwd 删除所有以root开头的行
将替换的结果写入输出结果中 sed 's/root/ROOT/w sed.out' passwd
在字符串前插入字符串 sed -n 's/root/ROOT &/p' passwd
在字符串root后插入字符串ROOT sed -n 's/root/& ROOT/p' passwd
14、将sed结果写入文件命令
sed '1,2 w aaa' passwd 将passwd的1.2行写入aaa文件中
sed '/root/ w bbb' passwd 将含有字符串root的行写入到文件bbb中。
15、附加文本
sed '/root/r bbb' passwd 将文本bbb中的内容附加到root匹配的行下
16、匹配首次后退出
sed '/.root.*/q' passwd 匹配文件中含有root字符串的行,匹配第一次后退出匹配。
17、替换控制字符,一般windows传到linux下时,打开后会出现^M的字样
sed 's/##//g;s/^0*//g;s/^M//g' dos.txt 这里第一替换dos.txt中出现的##,第个替换行首出现的0,不论有几个全部替换,第三个替换文件中的控制字符^M.
因没有发现此类文档,故未做深入研究。
cat 1.txt |sed 's/-*//g;1d;$d;/^$/d' |awk '{print $1}' 删除文本1.txt的-----的行,在删除第一行,删除最后一行,删除空白行,用awk打印第1列即为所需。
1.txt内容如下:
Database Size(MB) DataCreated
---------------------------
GOSOUTH 2244 12/11/97
TRISUD 5632 8/9/99
(2 rows affected)
18.附加文本
dos。txt内容如下:
AC456
AC492169
AC9967
AC88345
在每行后面添加 passwd
sed 's/[0-9][0-9]*/& passed/g' dos.txt
19、从shell向sed传值
#NAME="It's a go situation"
#REPLACE=“GO”
#echo $NAME |sed "s/go/$REPLACE/g" 切记这里是双引号。
从sed输出中设置shell变量
#NAME="it's a go situation"
#REPLACE="GO"
#NEW_NAME=`echo $NAME |sed "s/go/$REPLACE/g"` 这里也是双引号
20、收集的一些命令集:
's/\.$//g' 删除以句点结尾行
'-e /abcd/d' 删除包含abcd的行
's/[][][]*/[]/g' 删除1个以上空格用1个空格代替
's/^[][]*//g' 删除行首空格
's/\.[][]*/[]/g' 删除句点后跟2个或更多空格,以一个空格代替
'/^$/d' 删除空行
's/^.//g' 删除第一个字符
's/COL\(...\)//g' 删除紧跟COL的后三个字母
's/^\///g' 从路径中删除第一个\
's/[]/[]//g' 删除所有空格并用tab键代替
's/^[]//g' 删除所有行首的tab键
's/[]*//g' 删除所有tab键
删除路径名第一个\符号 echo $PWD |sed 's/^\///g'
追加插入文本 echo "Mr wILLIS" |sed 's/Mr /& Bruce/g'
删除首字符 echo "accounts doc" |sed 's/^.//g' 返回:ccounts doc
删除文件扩展名 echo "accounts.doc" |sed 's/.doc//g'
增加文件扩展名 echo "accounts" |sed 's/$/.doc/g'
替换字符系列 x="Department+playroll&Building G"
echo $x |sed 's/\+/of/g;s/\&/Located at/g'
sed完结。