linux - 一起使用 echo 和 grep

标签 linux bash unix

我想同时使用 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 地址和节点名称是在运行时生成的。 请建议一种获得所需输出的方法。 谢谢。

最佳答案

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

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

相关部分是

awk -v prefix="IP-Address|Directory name|" '/ORA/ { print prefix $0 }'

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

关于linux - 一起使用 echo 和 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28815094/

相关文章:

bash - 生成二元选择的不同方法

linux - 删除引号 sed

git - 如何在 NFS 分区中拥有 git 存储库,在本地分区中拥有工作树?

python - 子进程.Popen : 'OSError: [Errno 2] No such file or directory' only on Linux

linux - 在 linux 内核 3.13 中找不到 tcp_autocorking 和 tcp_abc 文件

string - 多个字符串,在 80 个字符处截断行

bash - 如何在 Bash 中更改命令行参数?

c - 如何在运行时获取数据和bss地址空间(在Unix C程序中)

linux - __alloc_pages_slowpath() 是否可重入安全?

linux - 相同变音符号(变音符号)的不同 UTF-8 签名 - 2 种二进制方式来编写变音符号