sed基本语法

大部分整理自鸟哥私房菜

使用方法

sed [ -nefr] [n1,n2] acction 
-n: 是安静模式,只有经过sed处理的行才会显示,其他不现实
-e: 表示直接在命令行上执行。是默认选项不用填写。
-f: 将Sed的操作写在一个文件里面,用的时候-f filename 就可以按照内容进行Sed操作
-r:表示支持扩展正则表达式,默认支持基础正则表达式
-i: 直接修改读取的文件内容,而不是由文件输出
n1,n2 代表的是行数
  • Sed的action (动作)支持如下参数
a: 表示添加,后接字符串,添加到当前行的下一行
c:表示替换,后接的字符串,用它来替换N1到N2之间的行
d:删除行
i:表示插入,后街字符串,添加到当然行的上一行
p:表示打印和-n一起使用
s: 表示搜索,还可以替换1,20s/old/new/g表示把1到20行的old换成new

正则替换

sed 's/要被替换的字符串/新的字符串/g'

使用示例

  • 将old 替换为 new
echo "old new djkalfja" | sed '1,20s/old/new/g'
echo "old new djkalfja" | sed 's/old/new/g'
  • \ 与 /
  • 测试echo
   echo "\\\\///"

   \\///
  • 将\替换为/
   echo "\\\\///" | sed 's#\\#/#g'
 
   /////
  • 将/替换为\
echo "\\\\///" | sed 's#/#\\#g'

    \\\\\
  • 查看密码文件
nl /etc/passwd | head -5

 1 root:x:0:0:root:/root:/bin/bash
2 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
3 bin:x:2:2:bin:/bin:/usr/sbin/nologin
4 sys:x:3:3:sys:/dev:/usr/sbin/nologin
5 sync:x:4:65534:sync:/bin:/bin/sync
  • 增加功能
nl /etc/passwd | head -5 | sed '2,4a hello\nworld'

 1 root:x:0:0:root:/root:/bin/bash
2 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
hello
world
3 bin:x:2:2:bin:/bin:/usr/sbin/nologin
hello
world
4 sys:x:3:3:sys:/dev:/usr/sbin/nologin
hello
world
5 sync:x:4:65534:sync:/bin:/bin/sync
  • 删除功能
    nl /etc/passwd | head -5 | sed '2,4d'
    
    

1 root:x:0:0:root:/root:/bin/bash
5 sync:x:4:65534:sync:/bin:/bin/sync
```

  • 按行修改
     nl /etc/passwd | head -5 | sed '2,4c No 2-4 number'
    
  1 root:x:0:0:root:/root:/bin/bash
    No 2-4 number
     5 sync:x:4:65534:sync:/bin:/bin/sync
  • 打印功能
    nl /etc/passwd | head -5 | sed -n '2,4p'
     
     2  daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
     3  bin:x:2:2:bin:/bin:/usr/sbin/nologin
     4  sys:x:3:3:sys:/dev:/usr/sbin/nologin
  • eth0网卡 ip 提取

    • 查看eth0信息
ifconfig eth0
  • 信息如下
eth0 Link encap:Ethernet HWaddr b8:ae:ed:db:dd:2f
inet addr:192.168.1.82 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::baae:edff:fedb:dd2f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1817953 errors:0 dropped:23976 overruns:0 frame:0
TX packets:162649 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:461052740 (461.0 MB) TX bytes:22537583 (22.5 MB)
  • 获取192.168.1.82这个ip
ifconfig eth0 | grep 'inet addr:' | sed 's/^.*addr://g' | sed 's/ Bcast.*$//g'
  • 综合运用
  • 删除 manpath.config这个文件中没有注释的MAN的行,并且显示
cat /etc/manpath.config | grep "MAN" | sed 's/^#.*$//g' | sed '/^$/d' | head -5

   MANDATORY_MANPATH /usr/man
MANDATORY_MANPATH /usr/share/man
MANDATORY_MANPATH /usr/local/share/man
MANPATH_MAP /bin /usr/share/man
MANPATH_MAP /usr/bin /usr/share/man
  • 修改文件内容
    • 将结尾的.换成!
sed -i 's/\.$/\!/g' test.txt
  • 在文档最后一行增加Hello world!
sed -i 'a Hello world!' test.txt

vim中sed使用

  • 将rep 10替换为rep 100, 一个一个替换
:1,$s/rep 10/rep 100/gc
  • 将\替换为/,一个一个替换
:1,$s#\\#/#gc

你可能感兴趣的:(sed基本语法)