文本处理 sed

生成测试文本
for a in $(seq 1 1 10); do echo line$a; done > a.txt
文本筛选
sed -n '8p' a.txt
line8
定位一个区间,x行到y行)
cat a.txt | sed -n '3, 5p'
line3
line4
line5
or 正则写法
cat a.txt | sed -n '/e3/, /e5/p'
"!" #感叹号,对所选的行进行取反
cat a.txt | sed -n '3!p'
范围取反
cat a.txt | sed -n '/e3/, /e5/!p'
筛选本机IP
ifconfig eth0 | sed -n "/inet /p" | awk '{print $2}'
文本替换
命令格式:sed '行号+c命令+需要替换的内容'
nl passwd | sed '5c======'
将1-5行整体的内容都替换成======这些内容
nl passwd | sed '1,5c======'
将第5行的内容替换成======这些内容
nl passwd | sed '5c ======'

sed替换命令。
- 1.如果只是sed 's/旧字符/新字符',那么就只会替换每行第一个遇到的旧字符
-
- 因此要在最后加上g,表示全局,才会全部替换
延长sshd 登陆时间
- 因此要在最后加上g,表示全局,才会全部替换
sed 's/#ClientAliveInterval 0/ClientAliveInterval 30/g' /etc/ssh/sshd_config
sed 's/#ClientAliveCountMax 3/ClientAliveCountMax 3/g' /etc/ssh/sshd_config
systemctl restart sshd
systemctl status sshd
sed 's/:/>> /g' /etc/passwd


将txt文件名的小写字母换成大写
ls *.txt | sed 's/^.\+/\U&/'


\1等同于$1

- sed '1r 123.txt' abc.txt : 代表把123.txt整个文件的内容附加在abc.txt的第一行内容之后
- sed '1w 123.txt' abc.txt : 代表把abc.txt的第一行拷贝到123.txt文件
注意此时会覆盖文件123.txt原本的内容
提取退出

文本删除
将第2-5行的内容全部删除
cat passwd | sed '2,5d'
删除文本中的空行
sed '/^$/d' all.txt #删除文本中的空行