我想要翻译:
"a b c syscall=257 success=yes"
改为:
"a b c syscall=openat success=yes"
我喜欢使用sed组捕获正则表达式和替换,并结合使用 ausyscall 应用于正则表达式组提取的数字。
我在 Linux/bash 下尝试了以下操作:
echo "a b c syscall=257 success=yes" |
sed -e "s:syscall=\([0-9]*\):SYSCALL="$(ausyscall 257)":"
它打印:a b c SYSCALL=openat success=yes
正如预期的那样。
然后我尝试使用捕获组 #1 作为 的参数ausyscall
。像这样:
echo "a b c syscall=257 success=yes" |
sed -e "s:syscall=\([0-9]*\):SYSCALL="$(ausyscall \1)":"
这将调用ausyscall 1
which 打印write
。这不是捕获的组 #1(其值为 257)。
因此我尝试使用\\1
,但也失败了:
echo "a b c syscall=257 success=yes" |
sed -e "s:syscall=\([0-9]*\):SYSCALL="$(ausyscall \\1)":"
这将调用失败,在 stderr( )ausyscall \1
上打印错误并在 stdout 上打印。Unknown syscall \1 using x86_64 lookup table
a b c SYSCALL= success=yes
无法将捕获的值传递给 ausyscall。我尝试使用单引号,但无法调用 ausyscall。
可以这样使用sed吗?
- 我只想知道是否能够用sed来做到这一点。
- 我知道可以通过其他方式(perl、python 脚本、gawk 等)来完成,但我想看看是否可以用 sed 来完成,以及问题是否与引用或类似的东西有关。
使用sed可以实现吗?如果可以,我遗漏了什么?