管道命令到 wsl awk 不起作用

管道命令到 wsl awk 不起作用

我正在运行 Windows 10 / WSL2 / Ubuntu 20.04,并尝试ifconfig eth0 | grep 'inet ' | awk '{ print $2 }'在 PowerShell 中执行此操作。以下是我想出的办法:

wsl ifconfig eth0 | wsl grep 'inet ' | wsl awk '{ print $2 }'

wsl grep在 PowerShell 中可以像grep在 Ubuntu 中一样工作,但wsl awk在 PowerShell 中不能像awk在 Ubuntu 中一样工作。

有任何想法吗?

答案1

将整个命令作为一个大的 bash 命令一次发送到 WSL,而不是 3 个单独的 WSL 调用,例如:

wsl bash -c "ifconfig eth0 | grep 'inet ' | awk '{ print \`$2 }'"

答案2

$这似乎是有关特殊字符“ ”(变量的前缀字符)的转义字符的问题。

在 Windows CMD WSL 中,插入符号 ( ^) 在许多情况下可以很好地转义特殊字符。例如,

wsl ifconfig eth0 | wsl grep 'inet ' | wsl awk '{ print ^$2 }'

在 Windows PowerShell 中,反斜杠 ( \\) 和反引号 ( `) 以及一些字符可以逐个转义特殊字符。

wsl ifconfig eth0 | wsl grep 'inet ' | wsl awk '{ print \$2 }'
wsl bash -c "ifconfig eth0 | grep 'inet ' | awk '{ print \`$2 }'"

在 bash shell 中,反斜杠\\也有效。

ifconfig eth0 | grep 'inet ' | awk '{ print \$2 }'

相关内容