2.shell中的文本处理:grep、awk与sed

shell中的文本处理:grep、awk与sed


在linux操作中经常需要我们对已有的文本进行来料加工(进行相关的查找、替换和计数等操作)。这需要我们熟练的掌握三种常见的linux shell工具,grepawksed


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的内容需要我们长时间的尽心练习,三者需要配合使用,发挥其特长,在对日志的处理,数据库结果的处理,进程和端口的截取,文本的修改和抽取等方面都有着很多的应用。只有熟练掌握才可以在众多文件中采集到想要的字符串。。。^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值