我正在寻找一种可移植的方法来转义字符串中的反斜杠awk。
例如,对于 GNU 和 BSD,您可以编写:
echo '\ \\ \\\' | command -p awk '{gsub(/\\/,"\\\\"); print}'
Run Code Online (Sandbox Code Playgroud)
但在其他 NIX 上你必须这样写:
echo '\ \\ \\\' | command -p awk '{gsub(/\\/,"\\\\\\\\"); print}'
Run Code Online (Sandbox Code Playgroud)
如果您无法访问 AIX/HP-UX/Solaris/etc...,我认为可以awk通过以下方式用 GNU/BSD 模拟该问题:
echo '\ \\ \\\' | awk '{gsub(/\\/, ... ); print}'
echo '\ \\ \\\' | awk --posix '{gsub(/\\/, ... ); print}'
Run Code Online (Sandbox Code Playgroud)
其中...两个命令相同;两者都应该产生:
\\ \\\\ \\\\\\
Run Code Online (Sandbox Code Playgroud)
该awk命令应该是可移植的:
echo '\ \\ \\\' | awk '{gsub(/\\/, "&&")} 1'
Run Code Online (Sandbox Code Playgroud)
其中&表示使用所使用的正则表达式模式的完整匹配字符串 ie /\\/。