sed从syslog事件替换文件名路径中的空格

时间:2015-10-07 19:45:52

标签: regex bash awk sed

我很难知道如何在此日志事件的'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

3 个答案:

答案 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=