shell中的文本处理:grep、awk与sed
在linux操作中经常需要我们对已有的文本进行来料加工(进行相关的查找、替换和计数等操作)。这需要我们熟练的掌握三种常见的linux shell工具,grep 、awk 与 sed。
grep
grep有三种方式:
grep 标准grep命令
egrep 扩展grep,支持基本及扩展的正则表达式
fgrep 允许查找字符串而不是一个模式
grep选项:
常见的grep选项有:
-c 只输出匹配行的计数。
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。
我们以/etc/passwd为例,为了避免意外,拷贝一份文件出来练习:
1.在多个文件中找到指定的内容,并且统计其行数:
[root@oracle mnt]# grep 'bash' /mnt/passwd
root:x:0:0:root:/root:/bin/bash
redhat:x:500:500:redhat:/home/redhat:/bin/bash
oracle:x:501:501::/home/oracle:/bin/bash
zabbix:x:502:502::/home/zabbix:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
[root@oracle mnt]# grep 'bash' /mnt/passwd -c
5
2.grep的多个匹配,使用-E这个参数,注意“|”的两侧不可以有空格,必须紧连在一起。
[root@oracle mnt]# grep -E "bash|root|pulse" /mnt/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
redhat:x:500:500:redhat:/home/redhat:/bin/bash
oracle:x:501:501::/home/oracle:/bin/bash
zabbix:x:502:502::/home/zabbix:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
如果不使用grep,可以使用egrep这个命令,egrep支持正则表达式:
[root@oracle mnt]# egrep "bash|root|pulse" /mnt/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
redhat:x:500:500:redhat:/home/redhat:/bin/bash
oracle:x:501:501::/home/oracle:/bin/bash
zabbix:x:502:502::/home/zabbix:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
正则匹配的grep,找到ifconfig里的ip类所在行:
[root@oracle mnt]# ifconfig | grep [0-255].[0-255].[0-255].[0-255]
inet addr:192.168.242.137 Bcast:192.168.242.255 Mask:255.255.255.0
inet addr:127.0.0.1 Mask:255.0.0.0
awk
涉及的内容如下:
(1)抽取域;
(2)匹配正则表达式;
(3)比较域;
(4)向awk传递参数;
(5)基本的awk行操作和脚本;
awk在日常使用中和加强版的cut类似,但是它有着更加强大的功能。
awk编写的方式主要遵循以下几个要素:
• 确保整个a w k命令用单引号括起来。
• 确保命令内所有引号成对出现。
• 确保用花括号括起动作语句,用圆括号括起条件语句。
awk的条件操作符:
(1)eg:例如在指定列中匹配相应的字符串,如果找到的话输出整行。
[root@oracle mnt]# awk -F ":" '{if($7~/nologin/) print $0}' /mnt/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
(2)查询apache服务的日志,统计需要的信息。例如统计被访问的内容有哪些并且根据访问次数(由多到少)列出。其中”$9”是返回状态码,当为200认为是正常返回.
[root@oracle httpd]# awk '$9 == 200 {print $7}' access_log-20161003 | sort | uniq -c | sort -k1 -nr
(3)找到没有匹配的行
eg:找到/etc/passwd文件中shell不为/sbin/nologin的用户
[root@oracle httpd]# awk -F ":" '{if($7!~/\/sbin\/nologin/) print $1}' /mnt/passwd
root
sync
shutdown
halt
redhat
oracle
zabbix
mysql
(4)匹配多个字符串
[root@oracle httpd]# awk '$0~/(root|bash)/' /mnt/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
redhat:x:500:500:redhat:/home/redhat:/bin/bash
oracle:x:501:501::/home/oracle:/bin/bash
zabbix:x:502:502::/home/zabbix:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
(5)指定列指定内容的匹配:
[root@oracle httpd]# awk -F ":" '{if ($1 == "root" && $7 == "/bin/bash") print $0}' /mnt/passwd
root:x:0:0:root:/root:/bin/bash
(6)通过给变量赋值可以使代码更加清晰
设置http的状态码是status,被访问的文件是file,抽取出可以被正常访问的文件
[root@oracle httpd]# awk '{status=$9;file=$7; if(status == 200) print file}' /var/log/httpd/access_log-20161003
(7)统计指定列值的和值
eg:我们需要统计出apache日志中能够被成功访问的页面的总个数
思路:先找到正常的页面(状态码是200的页面—->排序—->统计每个页面的个数—->统计所有页面个数)
[root@oracle httpd]# awk '{status=$9;file=$7; if(status == 200) {print file}}' /var/log/httpd/access_log-20161003 | sort | uniq -c | awk '{total+=$1}END{print total}'
4745
(8)找到当前目录下所有非目录文件,并且统计其总大小。
[root@oracle httpd]# ls -l | awk '/^[^d]/ {print $9"\t"$5} {total+=$5}END{print "total KB:" total}'
access_log 0
access_log-20161003 1335340
access_log-20161009 675598
access_log-20161016 37770
error_log 4181
error_log-20161003 9656
error_log-20161009 6649
error_log-20161016 2795
total KB:2076085
(9)从shell中向awk中传递字符串并进行处理
[root@oracle httpd]# STR="hello, world"
[root@oracle httpd]# echo $STR | awk '{print substr($STR, 8)}'
world
后续:
我们需要关注awk的许多内置函数,格式化输出,关系表达式等技能。
sed
sed可以进行全局替换,匹配指定行等操作。我们要介绍以下几个技巧:
• 抽取域。
• 匹配正则表达式。
• 比较域。
• 增加、附加、替换。
• 基本的s e d命令和一行脚本。
(1)找到指定的行
可以采用多种方式,指定某个范围、匹配某些字符串。
[root@oracle mnt]# sed -n '1,3p' /mnt/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@oracle mnt]# sed -n '1p' /mnt/passwd
root:x:0:0:root:/root:/bin/bash
[root@oracle mnt]# sed -n '/bash/p' /mnt/passwd
root:x:0:0:root:/root:/bin/bash
redhat:x:500:500:redhat:/home/redhat:/bin/bash
oracle:x:501:501::/home/oracle:/bin/bash
zabbix:x:502:502::/home/zabbix:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
找到任意以某个单词结尾的行
[root@oracle mnt]# sed -n "/.*bash/p" /mnt/passwd
root:x:0:0:root:/root:/bin/bash
redhat:x:500:500:redhat:/home/redhat:/bin/bash
oracle:x:501:501::/home/oracle:/bin/bash
zabbix:x:502:502::/home/zabbix:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
删除文本
(1)删除指定行文本:
[root@oracle mnt]# sed '1,3d' /mnt/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
redhat:x:500:500:redhat:/home/redhat:/bin/bash
oracle:x:501:501::/home/oracle:/bin/bash
zabbix:x:502:502::/home/zabbix:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
(2)删除匹配行文本
[root@oracle mnt]# sed '/\/bin\/bash/d' /mnt/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
替换文本
[ a d d r e s s [, address]] s/ pattern-to-find /replacement-pattern/[g p w n]
s选项通知 s e d这是一个替换操作,并查询 p a t t e r n - t o - f i n d,成功后用r e p l a c e m e n t - p a t t e r n替
换它。
替换选项如下:
g 缺省情况下只替换第一次出现模式,使用 g选项替换全局所有出现模式。
p 缺省s e d将所有被替换行写入标准输出,加 p选项将使 - n选项无效。 - n选项不打印输出
结果。
w 文件名 使用此选项将输出定向到一个文件
全局替换
[root@oracle mnt]# sed 's/\/bin\/bash/\/bin\/ksh/g' /mnt/passwd
root:x:0:0:root:/root:/bin/ksh
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
redhat:x:500:500:redhat:/home/redhat:/bin/ksh
oracle:x:501:501::/home/oracle:/bin/ksh
zabbix:x:502:502::/home/zabbix:/bin/ksh
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/ksh
将匹配的文本写入另外的文件
[root@oracle mnt]# sed 's/nologin/ksh/g w /mnt/new_passwd' /mnt/passwd
实际上我们可以认为直接将得到的结果重定向是一种更为直观的写法
[root@oracle mnt]# sed 's/nologin/ksh/g' /mnt/passwd > /mnt/new_passwd
只不过上述的w方式既可以把结果写入文件中,又可以在屏幕上进行输出。
快速命令:
(1)删除文本中的空行:
[root@oracle mnt]# sed '/^$/d' /etc/ssh/sshd_config
(2)删除文本中的所有空格
[root@oracle mnt]# ifconfig | sed 's/\ *//g'
eth0Linkencap:EthernetHWaddr00:0C:29:E1:34:3E
inetaddr:192.168.242.137Bcast:192.168.242.255Mask:255.255.255.0
inet6addr:fe80::20c:29ff:fee1:343e/64Scope:Link
UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1
RXpackets:1313errors:0dropped:0overruns:0frame:0
TXpackets:933errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:121969(119.1KiB)TXbytes:132875(129.7KiB)
Interrupt:19Baseaddress:0x2000
loLinkencap:LocalLoopback
inetaddr:127.0.0.1Mask:255.0.0.0
inet6addr:::1/128Scope:Host
UPLOOPBACKRUNNINGMTU:16436Metric:1
RXpackets:4errors:0dropped:0overruns:0frame:0
TXpackets:4errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:0
RXbytes:240(240.0b)TXbytes:240(240.0b)
(3)把行首的空格化为一个空格
[root@oracle mnt]# ifconfig | sed 's/^\ */\ /g'
eth0 Link encap:Ethernet HWaddr 00:0C:29:E1:34:3E
inet addr:192.168.242.137 Bcast:192.168.242.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fee1:343e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1360 errors:0 dropped:0 overruns:0 frame:0
TX packets:962 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:126085 (123.1 KiB) TX bytes:137405 (134.1 KiB)
Interrupt:19 Base address:0x2000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:240 (240.0 b) TX bytes:240 (240.0 b)
(4)将行尾的回车换成其他字符(由你指定)
[root@oracle mnt]# ifconfig | sed 'N;s/\n//g'
eth0 Link encap:Ethernet HWaddr 00:0C:29:E1:34:3E inet addr:192.168.242.137 Bcast:192.168.242.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fee1:343e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1548 errors:0 dropped:0 overruns:0 frame:0 TX packets:1080 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000 RX bytes:142865 (139.5 KiB) TX bytes:153473 (149.8 KiB)
Interrupt:19 Base address:0x2000
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0 TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 RX bytes:240 (240.0 b) TX bytes:240 (240.0 b)
(5)在每行的行首或者行尾添加字符串:
行首
[root@oracle mnt]# ifconfig | sed 's/^/head&/g'
headeth0 Link encap:Ethernet HWaddr 00:0C:29:E1:34:3E
head inet addr:192.168.242.137 Bcast:192.168.242.255 Mask:255.255.255.0
head inet6 addr: fe80::20c:29ff:fee1:343e/64 Scope:Link
head UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
head RX packets:1428 errors:0 dropped:0 overruns:0 frame:0
head TX packets:1001 errors:0 dropped:0 overruns:0 carrier:0
head collisions:0 txqueuelen:1000
head RX bytes:132205 (129.1 KiB) TX bytes:142259 (138.9 KiB)
head Interrupt:19 Base address:0x2000
head
headlo Link encap:Local Loopback
head inet addr:127.0.0.1 Mask:255.0.0.0
head inet6 addr: ::1/128 Scope:Host
head UP LOOPBACK RUNNING MTU:16436 Metric:1
head RX packets:4 errors:0 dropped:0 overruns:0 frame:0
head TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
head collisions:0 txqueuelen:0
head RX bytes:240 (240.0 b) TX bytes:240 (240.0 b)
head
行尾
[root@oracle mnt]# ifconfig | sed 's/$/&tail/g'
eth0 Link encap:Ethernet HWaddr 00:0C:29:E1:34:3E tail
inet addr:192.168.242.137 Bcast:192.168.242.255 Mask:255.255.255.0tail
inet6 addr: fe80::20c:29ff:fee1:343e/64 Scope:Linktail
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1tail
RX packets:1482 errors:0 dropped:0 overruns:0 frame:0tail
TX packets:1038 errors:0 dropped:0 overruns:0 carrier:0tail
collisions:0 txqueuelen:1000 tail
RX bytes:137151 (133.9 KiB) TX bytes:147205 (143.7 KiB)tail
Interrupt:19 Base address:0x2000 tail
tail
lo Link encap:Local Loopback tail
inet addr:127.0.0.1 Mask:255.0.0.0tail
inet6 addr: ::1/128 Scope:Hosttail
UP LOOPBACK RUNNING MTU:16436 Metric:1tail
RX packets:4 errors:0 dropped:0 overruns:0 frame:0tail
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0tail
collisions:0 txqueuelen:0 tail
RX bytes:240 (240.0 b) TX bytes:240 (240.0 b)tail
tail
可以看出行首的添加更加整齐,行尾比较零散
小结:
关于grep、awk和sed的内容需要我们长时间的尽心练习,三者需要配合使用,发挥其特长,在对日志的处理,数据库结果的处理,进程和端口的截取,文本的修改和抽取等方面都有着很多的应用。只有熟练掌握才可以在众多文件中采集到想要的字符串。。。^_^