[英]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.