“正则表达式基础”实验报告

正则表达式运用之 sed工具命令

用于练习的文本内容

ss -tunap | col
Netid  State      Recv-Q Send-Q     Local Address:Port       Peer Address:Port
udp    UNCONN     0      0                      *:68                    *:*      users:(("dhclient",960,5))
tcp    LISTEN     0      128                   :::22                   :::*      users:(("sshd",1145,4))
tcp    LISTEN     0      128                    *:22                    *:*      users:(("sshd",1145,3))
tcp    LISTEN     0      100                  ::1:25                   :::*      users:(("master",1222,13))
tcp    LISTEN     0      100            127.0.0.1:25                    *:*      users:(("master",1222,12))
tcp    ESTAB      0      64        192.168.31.101:22       192.168.31.103:13565  users:(("sshd",7639,3))
copy

1. 把以tcp开头的文字改为kashu

ss -tunap | sed 's/^tcp/kashu/'
copy

2. 删除头2行(下面4个sed的删除方式都可以)

ss -tunap | col | sed '1,2d'
ss -tunap | col | sed '3,$!d'
ss -tunap | col | sed -n '3,$p'
ss -tunap | col | sed -n '1,2!p'
copy

3. 打印第3~6行

ss -tunap | col | sed -n '3,6p'
copy

4. 删除所有含有tcp的行

ss -tunap | col | sed '/tcp/d'
copy

5. 打印所有含有:6001或:22端口号的行

ss -tunap | col | sed -n '/\(:6001\|:22\)/p'
ss -tunap | col | sed -n '/\(:6001\>\|:22\>\)/p'
copy

6. 在以tcp开头的行末尾加上 TCP

ss -tunap | col | sed -n 's/^tcp.*$/& TCP/p'
^表示开头
.*表示任意N外字符
$表示结尾
&表示匹配到的内容(在这里就是以tcp开头的一整行)

等同于

ss -tunap | col | sed -n 's/\(^tcp.*$\)/\1 TCP/p'
copy

7. 将所有包含tcp的行都替换为TTT

ss -tunap | col | sed '/tcp/c TTT'
ss -tunap | col | sed 's/.*tcp.*/TTT/g'
copy

8. 删除所有空行

sed '/^\s*$/d' abc.txt
\s表示空格和制表符\t

sed -r '/^[[:space:]]*$/d' abc.txt
copy

9. 删除每行开头的第1个字符

ss -tunap | col | sed 's/.//'

等同于

ss -tunap | col | sed 's/.//1'
copy

10. 删除每行开头的第3个字符

ss -tunap | col | sed 's/.//3'
copy

11. 删除每行开头的前两个字符

ss -tunap | col | sed 's/..//'
copy

12. 删除每行开头的前7个字符

ss -tunap | col | sed 's/.\{7\}//'

等同于

ss -tunap | col | sed 's/.......//'
copy

13. 删除每行最末尾的两个字符

ss -tunap | col | sed 's/..$//'
copy

14. 删除所有的数字

ss -tunap | col | sed 's/[[:digit:]]//g'

等同于

ss -tunap | col | sed 's/[0-9]//g'
copy

15. 删除偶数、奇数行

ss -tunap | col | nl -w1 -s' ' | sed '0~2 d'  删除偶数行
ss -tunap | col | nl -w1 -s' ' | sed 'n;d'  删除偶数行
ss -tunap | col | nl -w1 -s' ' | sed '1~2 d'  删除奇数行
copy

16. 每行被打印显示3次、5次

id | sed 'p;p'
等同于
id | sed -n 'p;p;p'


id | sed 'p;p;p;p'
等同于
id | sed -n 'p;p;p;p;p'
copy

17. 把每个字母都用括号()括起来

id -nu | sed -r 's/([[:alpha:]])/(\1)/g'id -nu | sed -r 's/([a-zA-Z])/(\1)/g'
copy

18. 把开头为??p的单词全部都替换成XXp

ss -tunap | col | sed 's/^..\(p\)\>/XX\1/g'
copy

19. 把history显示的结果中的序号前面所带的空格全部删除

history 5 | sed -r 's/^ +//g'
history 5 | sed 's/^ *//g'
history 5 | sed -r 's/^[[:space:]]+//g'
history 5 | sed 's/^[[:space:]]*//g'
copy

20. 取出一个文件路径的目录名称

ls -d / | sed 's@\(.*\/\).*@\1@g'
ls -d /boot/grub/grub.conf | sed 's@\(.*\/\).*@\1@g'
copy

21. 删除/etc/grub.conf文件中开头的空白符(注:这个空白符可能是空格或tab键所产生的)

sed -r 's/^[[:blank:]]+//' /etc/grub.conf
copy

22. 替换/etc/inittab一行中id:5:initdefault的数字为3

sed -n 's/id:[[:digit:]]:initdefault/id:3:initdefault/p' /etc/inittab
copy

下面是直接修改文件

sed -i 's/id:[[:digit:]]:initdefault/id:3:initdefault/' /etc/inittab
copy

23. 删除/etc/inittab文件开头的#号

sed -r 's/^#+//' /etc/inittab
copy

24. 删除/etc/inittab文件中开头的#号,但要求#号后面必须有空白字符

sed -re '/^#+$/d' -e '/^#[[:blank:]]+$/d' /etc/inittab
copy

25. 把开头第一个数字放到行末尾

ss -tunap | col | nl -w1 -s' ' | sed 's/\(^[[:digit:]]\)\(.*$\)/\2\1/'
copy

26. 除了字母和数字,其它字符全部删除

ss -tunap | col | sed 's/[^[:alnum:]]//g'
ss -tunap | col | sed 's/[^[:digit:][:alpha:]]//g'
copy

27. 删除第5行到最后一行中的所有数字

ss -tunap | col | sed '5,$s/[[:digit:]]//g'
copy

28. 显示以数字结尾的行

free | sed -n '/[[:digit:]]$/p'
copy

29. 把/etc/passwd文件中开头的单词和结尾的单词互换位置

sed -r 's#(^[[:alpha:]]+)(:.*\/)([[:alpha:]]+$)#\3\2\1#g' /etc/passwd
copy

30. 练习文件

#https://shiyanlou.com
# https://shiyanlou.com
#       https://shiyanlou.com
 #https://shiyanlou.com
        #https://shiyanlou.com
 # https://shiyanlou.com
 #      https://shiyanlou.com
        # https://kashu.org
        #       https://shiyanlou.com
WOW, http://shiyanlou.com
copy

删除:开头的井号

sed '/^#//' a.txt
copy

删除: 开头的#和紧随其后的N个空白字符

sed 's/^#[[:blank:]]*//' a.txt
copy

删除: 有N个空白字符开头和紧随其后的#号

sed 's/^[[:blank:]]*#//' a.txt
copy

删除: 有N个空白字符开头和紧随其后的#号,后#号后面的N个空白字符

sed 's/^[[:blank:]]*#[[:blank:]]*//' a.txt
copy

总结:贵在练习,熟能生巧

最新评论
回复
ProZJ
L219

ss -tunap 和 netstat -tunap 是一样的作用,用于查看系统当前所有的TCP, UDP sockets。之所以后面再加一个 | col,是因为ss显示结果的排版问题,你敲一下就知道了。

2015-06-15 19:56:53
回复
ProZJ
L219

ss -tunap | col是神马命令?

2015-06-15 15:54:37
回复