如何使用正则表达式搜索模式并使用awk向其添加内容?

时间:2017-02-22 11:38:42

标签: regex awk

我尝试使用正则表达式搜索模式,并且一旦发现想要使用awk附加内容。

示例:

abc/def/ghi/jkl/Io_LogUserVal[29]

预期:

abc/def/ghi/jkl/Io_LogUserVal_reg[29]

我试过

awk -F "/" '{gsub(/Io_(\w+)/,$NF"_reg"); print$0}'

5 个答案:

答案 0 :(得分:1)

使用GNU Awk gensub()函数使用正则表达式匹配,

awk '{$NF=gensub(/^(.+)_(.+)\[(.+)\]$/,"\\1_\\2_reg[\\3]","g",$NF);}1' file
abc/def/ghi/jkl/Io_LogUserVal_reg[29]

将最后一个字段($NF)与正则表达式(.+)_(.+)\[(.+)\]匹配后,根据需要修改捕获的组。 (.+)表示多次匹配任何字符。

答案 1 :(得分:0)

选择你需要的那个:

你可能想要这个吗?

awk -F'/' '$NF~/^Io/{$0=$0"_reg"}7' 

如果您只想检查整行中的模式,那么:

awk -F'/' '/Io/{$0=$0"_reg"}7' 

如果采用输入/输出示例,此行应为:

kent$  awk -F'/' -v OFS="/" '$NF~/^Io/{sub(/\W/,"_reg&",$NF)}7'<<<"abc/def/ghi/jkl/Io_LogUserVal[29]"                                                                       
abc/def/ghi/jkl/Io_LogUserVal_reg[29]

答案 2 :(得分:0)

您可以使用匹配的块替换&

awk '{gsub(/Io_(\w+)/,"&_reg"); print$0}'

如果您只想替换最后一个字段,可以这样做,添加-v OFS="/"$NF

awk -F "/" -v OFS="/" '{gsub(/Io_(\w+)/,"&_reg", $NF); print$0}'

答案 3 :(得分:0)

使用sed解决方案 -

echo "abc/def/ghi/jkl/Io_LogUserVal[29]"| sed 's/Io_LogUserVal/Io_LogUserVal_reg/g'
abc/def/ghi/jkl/Io_LogUserVal_reg[29]

echo "abc/def/ghi/jkl/Io_LogUserVal[29]"| sed '/Io/s/UserVal/UserVal_reg/g'
abc/def/ghi/jkl/Io_LogUserVal_reg[29]

答案 4 :(得分:0)

echo "abc/def/ghi/jkl/Io_LogUserVal[29]"| awk '{sub(/Val\[/,"Val_reg[")}1'

abc/def/ghi/jkl/Io_LogUserVal_reg[29]