sed的基本使用

2019-04-03  本文已影响0人  iCarpe_DIEM

sed简单介绍:
   sed是一款文本处理工具,称之为“流编辑器”,它的工作机制是,从文件中读取每一行数据放入模式空间中(pattern space),而后通过模式对模式空间中的数据进行匹配,如果匹配则对数据做相应的操作(action),如果不匹配则打印或者不打印,然后继续读取文件下一行的数据,直到数据全部读取完,如图:

sed工作机制.png
sed用法:
用法:
    sed [OPTION]... {script-only-if-no-other-script} [input-file]...
    选项:
        -n, --quiet, --silent:不输出模式空间的内容至屏幕上
        -e script, --expression=script:实现多点编辑
        -f script-file, --file=script-file:从指定文件中读取编辑脚本,也就是将要执行的操作放入脚本中。
        -r, --regexp-extended:支持使用扩展正则表达式
        -i[SUFFIX], --in-place[=SUFFIX]:直接对原文件进行编辑(危险操作)
        -i.bak: 备份文件并原处编辑

    编辑命令:
        p:打印模式空间数据
        d:删除模式空间数据
        a \text:在后一行添加文本
        i \text:在上一行添加文本
        c \text:将匹配的行替换为指定的数据
        w filename:将匹配到的数据存放到文件中
        r filename:将文本中的内容追加至匹配到的模式空间后面
            sed '/^2/r /etc/passwd' test
        =:为模式匹配到的行打印行号
        !:模式空间匹配到的行做取反操作
        s///:替换操作,其中分割符可以是###、@@@
            替换标记:
                g:全局替换
                w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中
                p:显示替换成功的行

    `地址定界:
          空地址:对全文进行处理
          单地址:
              #:指定位置
              /pattern/:对匹配到的行做处理
           地址范围:
              #,#:对指定的范围做处理
              #,+#:在第一个#之上+多少,例如:2,+3== 2,5,表示处理2~5行的数据
              /pattern1/,/pattern2/,表示处理模式pattern1~pattern2中的数据
            #,/pattern/:表示从第几行~pattern匹配到的行
          
          步进:~
              1~2:奇数行(是根据行号来定义的)
              2~2:偶数行(是根据行号来定义的)
    `
       

示例:
1)sed -n '2p' test:表示打印第2行的数据

1.png
2)sed -n '2p' test:表示打印第2行的数据
2.png
3)sed -n -e '2p' -e '5p' test:表示打印第2行跟第5行的数据
3.png
4)sed -n -f sedTest test:
4.png
5)sed -n -r '/root/p' /etc/passed:打印包含root字符的行
5.png
6)sed -i.bak '3d' test:删除第3行的数据
6.png
7)sed '2a \etc/passwd' test:在第2行下添加etc/passwd
image.png
8)sed '2i \etc/passwd' test:在第2行上面添加一行数据
image.png
9)sed '2c \This is a substitution command' test:将匹配到的行替换为指定的文本
image.png
10)sed -n '2w test.bak' test:将第2行的数据存储到test.bak文件中
image.png
11)sed '2r /etc/passwd' test:将passwd中的数据添加至匹配到的行下面
image.png
12)sed '/root/=' test:为匹配的行显示行号
image.png
13)sed '2!p' test:取反操作,显示不被匹配到的行
image.png
14)sed 's@root@Just for testing purposes@g':全局替换,替换匹配到的root字符
image.png
15)sed -n '2,5p' test:只显示第2行~第5行的数据
image.png
16)sed -n '2,+3p' test:同上
image.png
17)sed -n '/root/,/ftp/p' /etc/passwd:显示passwd文件中行首为root~行首为ftp的所有数据
image.png
18)sed -n '1~2p' test:显示行号为奇数的所有行
image.png
19)sed -n '2~2p' test:显示行号为偶数的所有行
image.png

Thanks

上一篇 下一篇

猜你喜欢

热点阅读