一起使用 echo 和 grep

Using echo and grep together

我想同时使用 echo 和 grep 语句。我已经尝试了大部分内容,但无法获得准确的输出 如我所愿

     aa=$(grep -A100000 "2010-03-24" log.txt|grep "ORA")
     echo "Ip-Address|Directory Name|${aa}" > output.txt

我正在查找日期,因为我想要当前日期之后的所有行,然后从中查找 "ORA"。还有其他方法,但根据我的日志文件,这是最合适的方法。 我得到这样的输出。

     10.46.162.86|ASD----Exception|2010-03-24 07 ORA-00001 - 80 -                  
     173.45.230.59 
     2010-03-24 07:00:47 ORA-00942 - 80 - 173.45.230.59
     2010-03-24 07:01:15 ORA-00001 - 80 - 173.45.230.59
     2010-03-24 07:02:17 ORA-12849 - 80 - 173.45.230.59
     2010-03-24 07:05:09 ORA-00001 - 80 - 173.45.230.59

理想的输出应该是这样的

     10.46.162.86|ASD----Exception|2010-03-24 07 ORA-00001 - 80 -  
     173.45.230.59 
     10.46.162.86|ASD----Exception|2010-03-24 07:00:47 ORA-00942 - 80 -    
     173.45.230.59
     10.46.162.86|ASD----Exception|2010-03-24 07:01:15 ORA-00001 - 80 - 
     173.45.230.59
     10.46.162.86|ASD----Exception|2010-03-24 07:02:17 ORA-12849 - 80 - 
     173.45.230.59
     10.46.162.86|ASD----Exception|2010-03-24 07:05:09 ORA-00001 - 80 -  
     173.45.230.59

我正在从不同目录的日志文件中获取 ORA。

输入类似于

     2010-03-22 07:00:47 ZZZZC941948879 RUFFLES 222.222.222.222 ORA-00001 -  
     80 - 98.88.35.133 HTTP/1.1 Mozilla/5.0+(Windows;+U;+Windows+NT+9.0;+en-   
     US;+rv:1.9.2.2)
     2010-03-22 07:00:47 ZZZZC941948879 RUFFLES 222.222.222.222 GET  
     /2009/10/yep-twitter-down.ht
     2010-03-22 07:00:48 ZZZZC941948879 RUFFLES 222.222.222.222 GET  
     /img/input-bg.jpg - 80 - 98.88.35.133 HTTP/1.1 Mozilla/5.0+ 
     (Windows;+U;+Windows+NT+9.0;+en-  
     US;+rv:1.9.2.2)+Gecko/20100319+Firefox/3.9.2
     2010-03-23 07:00:48 ZZZZC941948879 RUFFLES 222.222.222.222 ORA-00001 -      
     80 - 98.88.35.133 HTTP/1.1 Mozilla/5.0+(Windows;+U;+Windows+NT+9.0;+en- 
     US;+rv:1.9.2.2)+Gecko/20100319+Firefox/3.9.2
     2010-03-23 07:00:48 ZZZZC941948879 RUFFLES 222.222.222.222 GET  
     /img/topnav-about.jpg - 80 - 98.88.35.133 HTTP/1.1 Mozilla/5.0+ 
     (Windows;+U;+Windows+NT+9.0;+en-US;+rv:1.9.2.2)+Gecko/20100319
     2010-03-23 07:00:48 ZZZZC941948879 RUFFLES 222.222.222.222 GET     
     /img/entry-hr.jpg - 80 - 98.88.35.133 HTTP/1.1 Mozilla/5.0+      
     (Windows;+U;+Windows+NT+9.0;+en-US;+rv:1.9.2.2)+Gecko/20100319+Firefox
     2010-03-23 07:00:48 ZZZZC941948879 RUFFLES 222.222.222.222 ORA-00001 -   
     80 - 98.88.35.133 HTTP/1.1 Mozilla/5.0+(Windows;+U;+Windows+NT+9.0;+en-   
     US;+rv:1.9.2.2)+Gecko/20100319+Firefox/3.9.2
     2010-03-24 07:00:48 ZZZZC941948879 RUFFLES 222.222.222.222 GET    
     /img/header-bg.jpg - 80 - 98.88.35.133 HTTP/1.1 Mozilla/5.0+    
     (Windows;+U;+Windows+NT+9.0;+en-US;+rv:1.9.2.2)+Gecko/20100319
     2010-03-24 07:00:48 ZZZZC941948879 RUFFLES 222.222.222.222 GET     
     /img/bullet.gif - 80 - 98.88.35.133 HTTP/1.1 Mozilla/5.0+ 
     (Windows;+U;+Windows+NT+9.0;+en-US;+rv:1.9.2.2)+Gecko/20100319+Firefox
     2010-03-24 07:00:49 ZZZZC941948879 RUFFLES 222.222.222.222 ORA-00001 -                   
     80 - 98.88.35.133 HTTP/1.1 Mozilla/5.0+(Windows;+U;+Windows+NT+9.0;+en- 
     US;+rv:1.9.2.2)+Gecko/20100319+Firefox/3.9.2
     2010-03-24 07:00:49 ZZZZC941948879 RUFFLES 222.222.222.222 GET /img/bg-        
     module.jpg - 80 - 98.88.35.133 HTTP/1.1 Mozilla/5.0+  
     (Windows;+U;+Windows+NT+9.0;+en-US;+rv:1.9.2.2)+Gecko/20100319
     2010-03-24 07:00:50 ZZZZC941948879 RUFFLES 222.222.222.222 ORA-00942 -      
     80 - 98.88.35.133 HTTP/1.1 Mozilla/5.0+(Windows;+U;+Windows+NT+9.0;+en- 
     US;+rv:1.9.2.2)+Gecko/20100319+Firefox/3.9.2
     2010-03-24 07:00:50 ZZZZC941948879 RUFFLES 222.222.222.222 GET /img/bg-    
     sidebarul.jpg - 80 - 98.88.35.133 HTTP/1.1 Mozilla/5.0+ 
     (Windows;+U;+Windows+NT+9.0;+en-US;+rv:1.9.2.2)+Gecko/20100319
     2010-03-24 07:00:50 ZZZZC941948879 RUFFLES 222.222.222.222 ORA-00001 -  
     80 - 98.88.35.133 HTTP/1.1 Mozilla/5.0+(Windows;+U;+Windows+NT+9.0;+en-   
     US;+rv:1.9.2.2)+Gecko/20100319+Firefox/3.9.2
     2010-03-24 07:00:51 ZZZZC941948879 RUFFLES 222.222.222.222 ORA-00942 -      
     80 - 98.88.35.133 HTTP/1.1 Mozilla/5.0+(Windows;+U;+Windows+NT+9.0;+en- 
     US;+rv:1.9.2.2)+Gecko/20100319+Firefox/3.9.2

这里的问题是,当我执行 grep 操作时,它会根据异常提取 100 行或更多行,并且我只能将 Ip-Address 和节点名称附加到一行。 此外,IP 地址和节点名称在 运行 时间生成。 请建议一种获得所需输出的方法。 谢谢

@etanreisner 给了你答案。

一种方式:

尝试:

grep -A100000 "2010-03-24" log.txt|grep "ORA" |
while read aa
do
   echo "Ip-Address|Directory Name|${aa}"
done > output.txt

由于我只是知道目录名称中会出现特殊字符,因此我更喜欢 awk 而不是 sed 以避免代码注入问题:

grep -A100000 "2010-03-24" log.txt | awk -v prefix="IP-Address|Directory name|" '/ORA/ { print prefix [=10=] }' > output.txt

相关部分是

awk -v prefix="IP-Address|Directory name|" '/ORA/ { print prefix [=11=] }'

对于 -v prefix=value,awk 知道一个名为 prefix 且具有给定值的变量,并且 /ORA/ { print prefix [=14=] } 指示 awk 处理与正则表达式匹配的所有行 ORA 通过打印 prefix 后跟行(即 [=17=])。