Bash 如何使用shell脚本提取文件中的特定字符串

Bash 如何使用shell脚本提取文件中的特定字符串,bash,shell,Bash,Shell,如何使用shell脚本和特定日期提取的字符串数从单独文件中的这些行中仅提取字符串“blade******demandware.net” /on/demandware.servlet/webdav/Sites/Logs/jobs-blade1-7.mon.demandware.net-0-appserver-20201026.log' /on/demandware.servlet/webdav/Sites/Logs/service-ETCreateSubscriberDEServi-blade9-

如何使用shell脚本和特定日期提取的字符串数从单独文件中的这些行中仅提取字符串“blade******demandware.net”

/on/demandware.servlet/webdav/Sites/Logs/jobs-blade1-7.mon.demandware.net-0-appserver-20201026.log'
/on/demandware.servlet/webdav/Sites/Logs/service-ETCreateSubscriberDEServi-blade9-8.mon.demandware.net-0-appserver-20201023.log
/on/demandware.servlet/webdav/Sites/Logs/service-ACI_GC_BalanceEnquiry-blade9-9.mon.demandware.net-0-appserver-20201026.log
/on/demandware.servlet/webdav/Sites/Logs/sysevent-blade9-8.mon.demandware.net-0-appserver-20201025.log
在现实中,将有数百个文件

这是我目前使用的脚本

#!/bin/bash +x
pwd
grep -ic blade *
cat *.p > test.txt
awk -F 'jobs-' '{print $2}' test.txt
我可以得到一些信息,但不是我想要的准确信息。

使用awk:

 awk '{ match($0,/[0-9]{8}/);arr[substr($o,RSTART,RLENGTH)]+=1;match($0,/blade/);spoint=RSTART+RLENGTH;match($0,/\.demandware/); print substr($0,spoint,RSTART-spoint+1) } END { for (i in arr) { print i" - "arr[i]} } ' file
首先检查每一行的日期模式匹配(8个数字),创建一个数组arr,将日期作为索引,并增加值。然后提取blade和demand的匹配项,使用RSTART和RLENGTH查找介于两者之间的字符串。使用substr打印此字符串。在结束块中,我们使用awk打印存储在arr.

中的匹配计数:

 awk '{ match($0,/[0-9]{8}/);arr[substr($o,RSTART,RLENGTH)]+=1;match($0,/blade/);spoint=RSTART+RLENGTH;match($0,/\.demandware/); print substr($0,spoint,RSTART-spoint+1) } END { for (i in arr) { print i" - "arr[i]} } ' file

首先检查每一行的日期模式匹配(8个数字),创建一个数组arr,将日期作为索引,并增加值。然后提取blade和demand的匹配项,使用RSTART和RLENGTH查找介于两者之间的字符串。使用substr打印此字符串。在结束块中,我们打印存储在arr.

中的匹配计数,请参见:参见:I2 1-8.mon。p7 I5 7-2.mon。p7 I2 9-5.mon。p7 I8 2-4.mon。p7 I1 4-2.mon。p7 I3 6-6.mon。p7 I3 2-3.mon。p7 I2 9-9.mon。p7 I4 1-7.mon。p7 I4 9-8.mon。p7 I1 3-8.mon。p8 I8 4-2.mon。p8 I6 3-9.mon。p8 I1 3-2.mon。p8 I3 1-7.mon。p8 I2 9-9.mon。p8 I3 9-8.mon。p8 I4 6-5.mon。p8 I4 6-2.mon。p8 I2 20201028-19-138 20201023-2 20201025-10 20201026-17 20201027-13这是我得到的输出。除了最后的日期和计数,我们还有什么办法可以处理掉其他的东西吗。20201028-19-138 20201023-20201025-10 20201026-17 20201027-13这就是我得到的。我们能像下面提到的那样吗?20201023-20201025-10201026-1720201027-1320201028-19Hello,除了像这样的日期之外,我还得到了不相关的数据。11318021-112466176-116811920-112701095-110395314-112919484-11285842-117846099-117133731-112095114-117762405-146636195-117760074-11064006-11744542-11511763-11552696-1168766424-1您能在这方面提供帮助吗。谢谢。11-8月1日。p7 I5 7-2.mon。p7 I2 9-5.mon。p7 I8 2-4.mon。p7 I1 4-2.mon。p7 I3 6-6.mon。p7 I3 2-3.mon。p7 I2 9-9.mon。p7 I4 1-7.mon。p7 I4 9-8.mon。p7 I1 3-8.mon。p8 I8 4-2.mon。p8 I6 3-9.mon。p8 I1 3-2.mon。p8 I3 1-7.mon。p8 I2 9-9.mon。p8 I3 9-8.mon。p8 I4 6-5.mon。p8 I4 6-2.mon。p8 I2 20201028-19-138 20201023-2 20201025-10 20201026-17 20201027-13这是我得到的输出。除了最后的日期和计数,我们还有什么办法可以处理掉其他的东西吗。20201028-19-138 20201023-20201025-10 20201026-17 20201027-13这就是我得到的。我们能像下面提到的那样吗?20201023-20201025-10201026-1720201027-1320201028-19Hello,除了像这样的日期之外,我还得到了不相关的数据。11318021-112466176-116811920-112701095-110395314-112919484-11285842-117846099-117133731-112095114-117762405-146636195-117760074-11064006-11744542-11511763-11552696-1168766424-1您能在这方面提供帮助吗。谢谢