linux 之sed学习

sed的使用方法:(在下面提到的sed的用法,编辑文件时只修改标准输出的,并不会改变文件本身,如果需要修改后的文件可以重定向)

sed [options] '{command}' [filename] 

其中常见的options:

n:不打印编辑行到标准输出,默认情况下是打印所有输出(编辑和未编辑)

使用sed在文本中定位文本的方式:
x       x为一行号,比如1
x,y     表示行号范围从x到y,如2,5表示从第2行到第5行
/pattern/    查询包含模式的行,如/disk/或/[a-z]/
/pattern/pattern/   查询包含两个模式的行,如/disk/disks/
/pattern/,x  在给定行号上查询包含模式的行,如/disk/,3
x,/pattern/  通过行号和模式查询匹配行,如 3,/disk/
x,y!    查询不包含指定号x和y的行

基本sed编辑命令:
p      打印匹配行                      c\    用新文本替换定位文本
=      显示文件行号                    s     使用替换模式替换相应模式
a\     在定位行号后附加新文本信息        r     从另一个文本中读文本
i\     在定位行号前插入新文本信息        w     写文本到一个文件
d      删除定位行                      q     第一个模式匹配完成后退出或立即退出
l      显示与八进制ASCII代码等价的控制字符        y  传送字符
n      从另一个文本中读文本下一行,并附加在下一行   {}     在定位行执行的命令组
g      将模式2粘贴到/pattern n/

快速一行命令:
    's//.$//g'         删除以句点结尾行
    '-e /abcd/d'       删除包含abcd的行
    's/[][][]*/[]/g'   删除一个以上空格,用一个空格代替
    's/^[][]*//g'      删除行首空格
    's//.[][]*/[]/g'   删除句号后跟两个或更多的空格,用一个空格代替
    '/^$/d'            删除空行
    's/^.//g'          删除第一个字符,区别  's//.//g'删除所有的句点
    's/COL/(.../)//g'  删除紧跟COL的后三个字母
    's/^////g'         删除路径中第一个/

bash-2.05b$ cat sedtest
aaaaaa
bbbbb
bash-2.05b$ cat copytest
ppppp

1、显示指定行

sed  -n   '/aa/p'   sedtest                   //显示含有aa的行

sed -n '1,5p' sedtest                         //显示1,5行

sed -n '1,/aa/p' sedtest                      //理应是显示第一行含有aa的,可是有点问题
sed -n '1,$p' sedtest                        //显示整个文件

2、在指定行插入特殊的字符

sed  '1,5s/^/#/g'  sedtest  // 在sedtest的1到5行前加上#

3、显示匹配模式的行号

sed -n '/aa/=' sedtest

4、在每一行后面添加字符

sed 's/$/--end/g' sedtest

5、从一个文本中读取内容黏贴在另外一个文件的指定行

bash-2.05b$ sed '1r copytest' sedtest  
aaaaaa
ppppp
bbbbb

6、使用a在指定行后面添加文本

bash-2.05b$ sed '1a\eee' sedtest
aaaaaa
eee
bbbbb
7、在指定行前添加一行

bash-2.05b$ sed '1i\eee' sedtest
eee
aaaaaa
bbbbb

8、代替一行或多行
bash-2.05b$ sed '1c\Hi' sedtest          //第一行替换成Hi
Hi
bbbbb
bash-2.05b$ sed '1,2c\Hi' sedtest        //将第1,2行替换成Hi,现在只剩1行
Hi
9、直接修改文件内容

bash-2.05b$ cat sedtest
testtesttesttesttesttest
bbbbb
cccccc

bash-2.05b$ sed -i '1s/test//g' sedtest
bash-2.05b$ cat sedtest

bbbbb
cccccc

 


 







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值