我很难知道如何在此日志事件的'sproc ='文件路径中替换仅 空格以进行解析。我正在尝试使用awk(使用awk -F" "
)打印出sproc =字段,user =字段和其他一些字段,但我的结果不一致,因为某些'sproc ='字段中有空格文件名。任何人都可以提供一些指导,如何从文件名中删除空格,而不是事件消息中的其他空格?
user=myuser sproc=C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe act=read_file fileId=F:\\afolder\\hifile filePath=\\Test1 Data\\Read this too.rtf somevar=somedata anothervar=moredata
示例输出:
myuser@myhost ~ $ awk -F" " '{print "the user is: " $1 "the sproc is: " $2 "somevar is: " $6 }' < sedme
the user is: user=myuserthe sproc is: sproc=C:\\Program somevar is: fileId=F:\\afolder\\hifile
预期产出:
the user is: user=myuserthe sproc is: sproc=C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe somevar is: somevar=somedata
答案 0 :(得分:1)
但是,您想要执行此脚本中包含的任何操作:
$ awk -f tst.awk file
1 <user=myuser>
2 <sproc=C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe>
3 <act=read_file>
4 <fileId=F:\\afolder\\hifile>
5 <filePath=\\Test1 Data\\Read this too.rtf>
6 <somevar=somedata>
7 <anothervar=moredata>
sproc = [C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe]
user = [myuser]
filePath = [\\Test1 Data\\Read this too.rtf]
anothervar = [moredata]
somevar = [somedata]
fileId = [F:\\afolder\\hifile]
act = [read_file]
boxCollider
只需选择您希望如何存储和访问字段。
答案 1 :(得分:1)
我认为如果你已经得到它,最好在perl中完成:
perl -ne 'while(/(^|\s+)(\w+)=(.*?)(?=($|\s+\w+=))/g){print "the $2 is: $3\n"}'
关键模式是识别[spaces] [keyword] = [value],而不仅仅是空格分离。
我在您的数据上得到以下信息:
the user is: myuser
the sproc is: C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe
the act is: read_file
the fileId is: F:\\afolder\\hifile
the filePath is: \\Test1 Data\\Read this too.rtf
the somevar is: somedata
the anothervar is: moredata
答案 2 :(得分:0)
使用data-trigger="focus"
,您可以获得grep -oP
值:
sproc=...
或者如果你想摆脱grep -oP 'sproc=.+?(?= +\w+=)' file
sproc=C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe
:
sproc=