sed 学习记录

sed是如何进行文本处理的?

  • sed——流处理编辑器

jpp

  • sed 一次处理一行内容
  • sed 不改变文件的内容(除非 重定向 或者 加入 -i 参数)

sed–命令行格式

1
2
3
4
5
sed [options] 'command'file(s)

options: -e ; -n

command: 行定位(正则)+ sed命令(操作)

sed的打印命令

1
2
3
4
5
6
7
p  打印

sed 'p' files.txt #每一行都会重复

加 -n 可以去掉重复项

sed -n 'p' files.txt

间隔行输出

1
2
3
4
first~step

sed -n '1~2p'
输出的行为 1,3,5,7,9

sed 行定位

定位一行

1
2
3
4
5
x  ;  /pattern/

sed -n '10p' files.txt # 打印第十行

sed -n '/mooc/p' files.txt # 匹配正则 /mooc/

定位几行

1
2
3
4
5
6
7
x,y; /pattern(正则)/,x;

10,20; /news/,/mooc/;

sed -n '10,20p' files.txt #打印10-20行

sed -n '/news/,/mooc/p' files.txt #打印有news到mooc的行

反向定位

1
x,y!; /pattern(正则)/,x!;

sed 操作命令

-a 新增行

1
2
sed '5a =====' #在第五行后面新增 =====
sed '1,5a ====' #在一到五行后面分布新增 ====

-i 插入行

1
2
sed '5i =====' #在第五行前面新增 =====
sed '1,5i ====' #在一到五行前面分布新增 ====

-i 直接修改文件

1
sed -i /steamcommunity/d /etc/hosts  #删除/etc/hosts里面包含steamcommunity的行,不需要重定向。

-c 替代行

1
2
sed '5c =====' #替换第五行为 =====
sed '1,5c ====' #替换一到五行为 ==== (一到五行的内容都变成====)

-d 删除行

1
sed '/mooc/d'  #删除mooc的一行

-s 替换 分隔符/,#等

1
sed 's/old/new/' files.txt  #只替换一个

-g 全局 替换标志

1
sed 's/old/new/g' files.txt

-{} 多个sed命令,用;分开

1
sed '{20,30d;s/false/true}

-n

1
2
sed -n '{p;n}'  #输出奇数行
sed -n '{n;p}' #输出偶数行

-& 替换固定字符串(优化替换操作)

1
2
3
sed ’s/W/&123/'

&等于W 减少前面的字符输入

-\( \) 替换某种(部分)字符串

1
2
3
sed -n '/inet /p'|sed 's/inet addr:\([0-9.]\+\).*$/ip address  \1/'

ip address 10.135.27.195

-r 复制指定文件插入到匹配行

1
2
3
4
5
sed '1r 123.txt' abc.txt

#复制123.txt的内容插入到abc.txt的第一行后面

#不对源文件进行修改

-w 复制匹配行拷贝指定文件里

1
2
3
sed '1w abc.txt' 123.txt

#复制123.txt的第一行覆盖abc.txt

-q 终止/退出sed

1
2

nl passwd | sed '/false/q' # 查到第一个发false就停止

sed 案例

在文件后面增加一行配置文件

1
2
3
sed '$a sometext' files.txt
$ 最后增加
sed '$a text' files.txt

获取服务器里面的error

1
sed -n '/Error/p' files.txt

大小写转换

1
2
元字符 \u \I \U \L 1
转换为大写/小写字符

脚本格式

1
sed -f scriptfile file(s)

取出用户名 uid

1
2
3
4
5
6
7
8
9
10
nobody   65534
libuuid 100
syslog 101
messagebus 102
landscape 103
ntp 104
sshd 105
ubuntu 500

root@VM-27-195-ubuntu:/home/ubuntu# sed 's/\(^[a-zA-Z_-]\+\):x:\([0-9]\+\).*$/\1 \2 /' /etc/passwd

jpg

0%