下面我试图仅从msg列中删除逗号。
输入文件(" abc.txt" 有多个条目如下):
alert tcp any any -> any [10,112,34] (msg:"Its an Test, Rule"; reference:url,view/Main; sid:1234; rev:1;)
预期产出:
alert tcp any any -> any [10,112,34] (msg:"Its an Test Rule"; reference:url,view/Main; sid:1234; rev:1;)
这是我尝试过使用awk:
awk -F ';' '{for(i=1;i<=NF;i++){if(match($i,"msg:")>0){split($i, array, "\"");tmessage=array[2];gsub("[',']","",tmessage);message=tmessage; }}print message'} abc.txt
答案 0 :(得分:0)
请您试着跟随并告诉我这是否对您有帮助。
awk '{for(i=1;i<=NF;i++){if($i~/msg:/){sub(/,$/,"",$(i+2))}}} 1' Input_file
答案 1 :(得分:0)
使用awk重写字段的问题是修改后的行的输出将由OFS进行字段分隔,这是静态的。
解决这个问题的方法是避免处理字段,只需处理$0
上的字符串替换。您可以手动拼接线的各个部分,如下所示:
awk '{x=index($0,"msg:"); y=index(substr($0,x),";"); s=substr($0,x,y); gsub(/,/,"",s); print substr($0,1,x-1) s substr($0,x+y)}' input.txt
或者说明了更容易阅读:
{
x=index($0,"msg:") # find the offset of the interesting bit
y=index(substr($0,x),";") # find the length of that bit
s=substr($0,x,y) # clip the bit
gsub(/,/,"",s) # replace commas,
print substr($0,1,x-1) s substr($0,x+y) # print the result.
}