【发布时间】:2018-08-15 17:32:23
【问题描述】:
我正在尝试使用 sed 正确解析 auditd 记录的输出。这些已经编码了十六进制、长时间戳和 UID/AUID,我需要通过命令对其进行解码/翻译。
我正在使用管道,因为我必须将它传送到系统日志。 我已经走到这一步了:
sed -r "s@msg=([A-Z0-9]*)\$@msg=$(xxd -r -p <<< \1)@"
示例输入:
[IRRELEVANT STUFF] msg=7468697320697320612073616D706C652074657374
问题在于 sed 没有“展开”捕获组,并且嵌套命令接收到错误的参数/输入。
xxd 应该接收7468697320697320612073616D706C652074657374 而不是\1
我以孤立的方式对此进行了测试,这确实是正在发生的事情。
帮助!谢谢!!
【问题讨论】:
-
模式中的文字
$是什么? -
那是匹配正则表达式的字符串/行终止符
-
是的,我没有注意到双引号。你可以试试这样的
sed -r "s@msg=([A-Z0-9]*).*|.@\1@g" | xxd -r -p。 (没有添加$和g标志。) -
恐怕这行不通,因为我正在尝试在线编辑,完整的输出(替换后)将被输入到不同的命令中
-
sed 的输出将是
\1。所以正确的字符串将被传递给xxd。
标签: regex bash shell sed audit