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

shell中的文本处理工具(grep,sed,awk) shell中的文本处理工具一、grep1、grep的格式2、grep字符数量匹配规则3、示例二、sed1、sed的格式2、对字符的处理3、字符替换4、示例三、awk1、awk的格式2、示例 一、grep 文本搜索工具,可以使用正则表达式搜索文本,把匹配的行打印出来 grep支持正则表达式 egrep支持扩展的正则表达式 grep -E= egrep 1、grep的格式 grep 匹配条件 处理文件 -i 忽略大小写 -E “\<root" root字符之前不能有字符 阅读详情

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

shell 文本处理 grep sed awk 用法 (通俗的说) 通俗易懂 适合新手看 阅读详情

相关推荐

AFSim仿真系统—几何视角下的子系统交互机制解析

本文深入解析了AFSim仿真系统中子系统交互的几何机制。通过剖析世界坐标系、实体坐标系、部件坐标系等七层空间定位体系,阐述了传感器探测、目标指示等交互行为背后的几何原理与限制条件。掌握这套几何视角,是构建高保真、符合物理现实的AFSim仿真模型的关键,能有效避免坐标混乱、交互失效等常见问题。

terraform7cloud的博客 490

Linux中grep、sed和awk常见用法总结

I 等同于 --binary-files=without-match。-a, --text 等同于 --binary-files=text。如果没有 -e, --expression, -f 或 --file 选项,那么第一个非选项参数被视为。-L, --files-without-match 只打印没有匹配上的<文件>的名称。-l, --files-with-matches 只打印有匹配的<文件>的名称。

gofordata的博客 1472

grep命令用法

n显示匹配行时,与文件行号一起显示。(显示结果所在的行号)R递归的读取每个目录下的所有文件,遵循所有符合链接。i忽略字符大小写的差别-E 可以传递多个内容,使用|来分割多个pattern ,以此实现OR操作[root@i-3pedyvud ~]# grep -Rn "LoadModule" /etc/httpd*/etc/httpd/conf/httpd.conf:48:# have to place corresponding `LoadModule' lines at this location so

weixing100200的专栏 2256

VS Code ESP-IDF无法找到源文件、头文件波浪线解决

背景:想要编译小智AI项目,可以正常编译。但是一些头文件,例如#include <nvs.h>等无法找到。

Hot_Ant的博客 1489

一个测试工程师走进一家酒吧……

一个测试工程师走进一家酒吧,要了一杯啤酒;一个测试工程师走进一家酒吧,要了一杯咖啡;一个测试工程师走进一家酒吧,要了 0.7 杯啤酒;一个测试工程师走进一家酒吧,要了-1 杯啤酒;一个测试...

字节跳动技术团队官方博客 4884

linux grep命令详解

简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更...

weixin_34405557的博客 3665

ESP32 驱动 SYN6288 语音合成:Arduino IDE 下实现中文数字混合文本的智能播报

本文详细介绍了如何在Arduino IDE环境下使用ESP32驱动SYN6288语音合成模块,实现中文数字混合文本的智能播报。通过硬件选型、开发环境搭建、编码转换原理、命令帧构造及串口通信实战等步骤,帮助开发者快速掌握语音播报技术。文章还提供了混合文本处理技巧和常见问题排查方法,适合智能硬件开发者参考。

weixin_42553471的博客 447

Linux命令:grep和awk

参考资料:https://www.cnblogs.com/wangcp-2014/p/5146335.htmlhttps://www.cnblogs.com/flyor/p/6411140.htmlgrep主要用来对文本进行处理,对指定的字符进行匹配筛选,并将匹配的行返回打印出来...

Wetsion的博客 2988

Uniapp微信小程序:详解根据角色权限动态展示底部tabbar,支持不同身份显示不同底部导航+灵活权限组合完整源码,菜单切换不闪烁、秒加载不卡(提供动态原生Tabbar配置+自定义组件形式2种方案)

uni-app微信小程序实现根据用户不同角色显示不同的tabBar,uniapp微信小程序原生tabbar实现动态菜单导航,微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色,动态pages,uni-app微信小程序动态tabBar,根据不同用户展示不同的tabBar,uni-app微信小程序动态切换tabBar,根据不同用户角色展示不同的tabBar,微信小程序自定义底部tabbar动态修改,Uniapp小程序根据权限(角色)不同动态展示底部tabbar,解决tabbar闪烁卡顿问题,小

✅ 精选推荐文章 4282

【FISCO BCOS】二十、多机部署区块链

实际开发中,为了满足高可用性和高容错性的需求,往往会采用多级部署区块链的方式,今天介绍一下FISCO BCOS的多机部署流程。

naihe_fish的博客 3646

完整复盘【避雷jd文职某岗位】潍坊青州hhj(据说未来搬到天津),助理实验师岗位,三人进面,面试全部不及格,空头岗位!像这种情况,该单位很多 | 附个人完整备考背诵题目 | 世间一场梦,不会再考这个了

本文以博主本人报考jun dui文职,从报考、备考、考试、查成绩到资格审查、面试,全程亲身经历,给想要报考该内容的朋友们一些小的参考。祝你顺利上岸!完整复盘【避雷jd文职某岗位】潍坊青州hhj(据说未来搬到天津),助理实验师岗位,三人进面,面试全部不及格,空头岗位!像这种情况,该单位很多 | 附个人完整备考背诵题目 | 世间一场梦,不会再考这个了

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 245

Shell三剑客(grep、sed、awk)

Shell三剑客(grep、sed、awk)一、grep二、sed流编辑器(1)sed简介:(2)工作流程:- 常见选项- 常见操作- sed替换标记- sed元字符集sed用法示例(1)输出符合条件的文本(2)删除符合条件的文本 ’d'(3)替换符合条件的文本(4)迁移符合条件的文本(5)使用脚本编辑文件三、awk工具(1)awk工作流程(2)awk常见用法(3)特殊的内建变量用法示例:(1)按行输出文本(2)按字段输出文本(3)通过管道符、双引号调用shell命令 一、grep grep的一些正则表达式

礁之的博客 9386

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

shell编程之文本三剑客grep、sed、awk

Shell编程中的文本三剑客(grep、sed、awk)是Linux/Unix环境下最强大的文本处理工具组合,各自擅长不同的文本处理场景grep‌功能:文本过滤工具,主要用于搜索匹配特定模式的行应用场景:日志过滤、配置文件检查sed‌功能:流编辑器,擅长行级文本编辑工作流程:读取→执行→显示循环处理每行文本awk‌功能:文本分析工具,擅长列处理和格式化输出应用场景:数据统计、报表生成三者的典型配合:先用grep筛选目标行,再用sed进行编辑处理,最后用awk格式化输出和分析核心功能。

jeffry__jiang的博客 1917

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

shell 中的grep sed awk命令

处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。3.编写一个管道命令序列,首先使用grep查找包含特定模式的行,然后使用tr进行大小写转换,接着使用sort进行排序,最后使用uniq去除重复行。

Tpw12qaz的博客 1610

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

文本处理三剑客——grep、sed、awk

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容发送往屏幕。然后读入下行,执行下一个循环。如果没有诸如“D”的特殊命令,那会在两个循环之间清空模式空间,但不能清除保留空间。这样不断重复,直到文件末尾。(文件内容并没有改变,除非你使用重定向存储输出或-i)p'$p'//!要写在$的后面,p的前面N;p' 12345处理第 1 行(内容 “1”):不是最后一行(

2201_75894418的博客 2129

shell中的文本处理(grep,sed,awk命令)

grep    文本过滤命令sed    行编辑器awk    报告生成器一、grep命令grep       匹配条件   处理文件-a 不要忽略二进制数据。 -A&lt;显示列数&gt; 除了显示符合范本样式的那一行之外,并显示该行之后的内容。 -b 在显示符合范本样式的那一行之外,并显示该行之前的内容。 -c 计算符合范本样式的列数。 -C&lt;显示列数&gt;或-&lt;显示列数&gt;...

su_use的博客 1万+

shell 三剑客(grep,sed,awk)学习

shell语法中,grep:擅长查找和匹配文本;awk:擅长编辑和匹配文本内容;sed:删除格式化文本内容,对文本进行复杂处理

小青头的博客 990

shell脚本-grep、sed、awk三剑客

Shell 脚本中的 grep、sed 和 awk 被称为 “三剑客”,它们是文本处理中的利器。grep用于快速搜索文本,sed则是对文本进行编辑和转换,而awk则提供了更强大的文本处理能力,可以按字段分割、执行条件操作等。这三者结合起来,能够处理各种文本处理任务,如日志分析、数据提取、格式转换等。

XMYX-0 1946

shell编程之文本处理3剑客:grep、sed、awk

正则表达式和通配符通配符:是用于匹配文件名或路径的特殊字符,主要用于命令行工具(如 Bash)中快速选择或操作多个文件。通配符通过模式匹配的方式,可以代替一个或多个字符,从而简化文件操作。(通通匹配的符号)在shell里使用---> bash(最常用的一种shell)正则表达式:使用一些特殊符号(元字符)+字母+数字按照某个规则组合成一个公式用来表示某个意思。它是perl语言最先发明的,vim、grep等命令直接调用perl的库。

m0_73379167的博客 1337

Linux文本处理三剑客(grep,sed,awk)

grep,擅长单纯的查找或匹配文本内容 sed,更适合编辑、处理匹配到的文本内容 awk,更适合格式化文本内容,对文本进行复杂处理。

qq_43813373的博客 2439

shell四剑客:grep find sed awk

shell四剑客:grep:主要的功能可以实现对文件的进行模糊搜索find:主要的功能可以实现对系统中进行查找sed:功能跟vim一样的,主要对文件的进行一些增删改查等操作awk:功能与grep类似,主要的作用可以对文件的进行模糊搜索,但是可以搜索某一列!

小白的博客 1027

十三、Linux Shell脚本:文本处理三剑客之 sed 与 awk

如果说grep是文本处理的“探照灯”,那sed和awk就是“手术刀”和“瑞士军刀”。sed 擅长按行“动手术”,可以轻松地删除、打印或替换特定行的内容,尤其是它的替换功能(s/.../.../)非常强大。而 awk 更厉害,它天生就能看懂按列(字段)分布的数据,像个小型的Excel。你可以让它只打印某几列,或者根据某一列的值做计算和判断,特别适合生成统计报告。

专注于 Agent 工程、AI 产品、Harness Engineering、LLM 算法等方向,OpenMathModel、Nivik 等开源项目作者 6万+

文本处理三剑客:grep、sed、awk实战指南

本文介绍了Linux文本处理三剑客grep、sed和awk的基本用法。grep用于文本搜索,支持字符串匹配、反向匹配和大小写忽略等操作。sed作为流编辑器,提供了丰富的文本处理命令,如替换(p)、删除(d)、打印(n)等,支持正则表达式和地址定位。文章通过实际案例演示了sed的各种应用场景,如行匹配、范围操作、变量引用等。这些工具的组合使用能高效解决日常文本处理任务,是Linux系统管理的重要技能。

2301_81276162的博客 1031

Shell三剑客 grep sed awk

grep 是一个文本搜索工具,用于根据给定的模式(正则表达式)在文件或输入流(比如说:echo “1234” | grep 正则表达式)中搜索匹配的行。grep 的主要作用是查找和过滤特定文本。sed是一个流编辑器,可以对文本进行查找、替换、删除等操作。它可以直接在文本流中编辑,不需要打开文件( 得到:sed不会对原文有任何的影响),非常适合批量处理。

weixin_67782795的博客 800
上一篇: 9.zabbix学习笔记:zabbix最新版3.0.4安装
下一篇: 1.http权威指南:url与资源
linux_player_c
博客等级 码龄13年 214粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值