Text-Processing

grep 用於分隔符中的 AFTER 模式

  • June 4, 2018

說我有一個文件

#cat file.log
abc|123|text1 modesc=bpp123 raw_info=clear
abc|123|text2 modesc=pmk123 severity=minor
abc|123|text3 modesc=pnj123 info=good

只想知道 print $3 中的哪些單詞出現在 “modesc=” 直到空格之後,

我更希望該命令的輸出如下所示:

abc|123|bpp123
abc|123|pmk123
abc|123|pnj123

使用 bash,我想列印出 $3 在“modesc =”之後的位置。有沒有辦法做到這一點?

$ sed 's/[^|]*modesc=\([^ ]*\).*$/\1/' file
abc|123|bpp123
abc|123|pmk123
abc|123|pnj123

這用於sed將整個最後一個欄位替換為modesc=直到下一個空格之後的內容。


$ awk -F '|' -vOFS='|' '{ sub(".*modesc=", "", $3); sub(" .*", "", $3)} 1' file
abc|123|bpp123
abc|123|pmk123
abc|123|pnj123

awk程序用兩個替換來修改第三列。第一個刪除直到並包括modesc=的所有內容,第二個刪除第一個剩餘空間之後的所有內容。最後的唯一1將導致awk列印修改的記錄(這可能會被替換為{ print })。


僅從原始數據的第三列(而不是其他任何內容)獲取字元串modesc=,您可以使用上述任一命令,然後將其通過管道傳輸cut -d '|' -f3,或者您可以使用

sed 's/.*modesc=\([^ ]*\).*$/\1/' file

或者

awk -F '|' -vOFS='|' '{ sub(".*modesc=", "", $3); sub(" .*", "", $3); print $3 }' file

引用自:https://unix.stackexchange.com/questions/447721