linux三剑客之sed的简单使用

sed的简单使用

  • sed
    • 1.输出
    • 2.查看行号
    • 3.删除
    • 4.替换
    • 5.Sed中s替换的高级应用
          • 1.删除文件中每行的第二个、最后一个字符
          • 2.删除文件中所有的数字
          • 3.将文件中每行的第一个、倒数第1个字符互换
          • 4.为文件中每个大写字母添加括号
    • 6. 行下追加 ,行上添加 ,替换整行


sed

sed 流式编辑器,可以对文档进行非交互式增删改
查,逐行处理
1,前置指令 | sed 选项 定址符 指令
2,sed 选项 定址符 指令 被处理文档
选项 -n 屏蔽默认输出 -i写入文件 -r支持扩展正则
指令 p输出 d删除 s替换


1.输出

 sed -n '1p' user		//输出第1行
 sed -n '2p' user    //输出第2行
 sed -n '3p' user    //输出第3行
 sed -n '2,4p' user   //输出第2~4行
 sed -n '2,+1p' user  //输出第2行以及后面1行
 sed -n '2p;4p' user  //输出第2行,第4行
 sed -n '/^root/p' user  //在sed中使用正则表达式输出以root开头的行
 sed -n '$p' user  //查看最后一行
 sed -n '1!p' user   //查看除了第1行以外的行, !代表取反


2.查看行号

 sed -n '=' user    //查看所有行号
 sed -n '$=' user   //查看最后一行的行号,相当于查看文档
总共有几行

3.删除

 sed  '1d' user   //删第1行
 sed  'd' user   //删所有
 sed  '3d' user  //删第3行
 sed  '2,5d' user   //删2~5行
 sed  '4,+2d' user  //删4行以及后面2行
 sed  '1d;3d' user   //删第1行,第3行
 sed  '$d' user   //删除最后一行

4.替换

vim test.txt    //准备素材,写入下列内容 
2017 2011 2018
2017 2017 2024
2017 2017 2017

sed 's/2017/8888/' test.txt  //替换所有行的第1个2017为8888
sed '1s/2017/8888/' test.txt  //替换第1行的第1个2017
sed '2s/2017/8888/' test.txt  //替换第2行
sed '1,2s/2017/8888/' test.txt  //替换1~2行
sed 's/2017/8888/2' test.txt   //替换所有行的第2个2017
sed 's/2017/8888/3' test.txt   //替换所有行的第3个2017
sed '/2011/s/2017/8888/' test.txt  //替换有2011的行的第1个2017
sed 's/2017/8888/g' test.txt   //替换所有行的所有个
sed '3s/2017/8888/;3s/2017/8888/' test.txt  //替换第3行的第1个和第2个2017

注意事项:可以更改替换的间隔符号
例如:sed ‘s!/bin/bash!/sbin/sh!’ /etc/passwd
将 /etc/passwd中的/bin/bash替换成/sbin/sh

5.Sed中s替换的高级应用

1.删除文件中每行的第二个、最后一个字符
sed 's/.//2;s/.$//' test.txt  
2.删除文件中所有的数字
sed -i 's/[0-9]//g' test.txt	
3.将文件中每行的第一个、倒数第1个字符互换
echo abcdefghi > abc
sed -r 's/^(.)(.*)(.)$/\3\2\1/' abc
4.为文件中每个大写字母添加括号
echo qwdqDGjdksdhTTh > test
sed -r 's/([A-Z])/(\1)/g' test

6. 行下追加 ,行上添加 ,替换整行

sed 'a 666' user  //在所有行下追加666
sed '1a 666' user  //第1行下追加666
sed 'i 666' user   //所有行上添加666
sed '3i 666' user  //第3行上添加666
sed '2a 666' user   //第2行下追加666
sed 'c 666' user   //所有行替换成666
sed '/root/c 666' user  //找到有root的行替换成666 

你可能感兴趣的:(linux,linux,shell)