簡體   English   中英

忽略引號之間的字符grep

[英]Ignore characters in between quotes grep

我正在嘗試編寫一個簡單的腳本,該腳本將在目錄中找到所有Java文件並顯示與某些搜索字符串匹配的所有日志消息。 例如,如果java文件中的一行包含“ log.info”,我想將其粘貼到文件中。 “錯誤”,“警告”和“調試”也是如此。 現在,這就是我所擁有的:

grep -rn --include \*.java "\b\.error\b" * >> log_strings.csv

然后,我用其他字符串之一手動替換“ .error”。 但是,當我稍后嘗試分離輸出時,grep在字段之間添加冒號“:”字符,並且某些日志消息也包含“:”字符,因此我的輸出變得混亂。 我最終得到:

filename:line_num:log.debug("some message:"+whatever());

大致翻譯為:

filename **TAB** line_num **TAB** log.debug("some message **TAB** "+whatever());

有沒有辦法替換grep生成的“:”字符,但忽略該字符串中的那個,這樣我的Java字符串就可以井井有條了? 我想必須使用sed或awk可以完成某些工作。

如果要用制表符替換前兩個冒號,只需將一個冒號替換兩次:

sed 's/:/\t/;s/:/\t/;'

在Perl中,可以通過在循環中運行替換來避免重復替換:

perl -pe 's/:/\t/ while ++$x % 3'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM