我尝试使用正则表达式搜索模式,并且一旦发现想要使用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}'
答案 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]