文本处理 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/旧字符/新字符',那么就只会替换每行第一个遇到的旧字符
    1. 因此要在最后加上g,表示全局,才会全部替换
      延长sshd 登陆时间
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

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

提取退出

文本删除

将第2-5行的内容全部删除

cat passwd | sed '2,5d'

删除文本中的空行

sed '/^$/d' all.txt #删除文本中的空行