【问题标题】:how to escape qutoes in ssh command and gawk [duplicate]如何在 ssh 命令和 awk 中转义引号 [重复]
【发布时间】:2021-10-09 20:08:35
【问题描述】:

我正在尝试使用 ssh 和 gawk 命令读取远程文件,但由于引号问题而失败。

ssh <HOST> 'gawk -v RS='"' 'NR % 2 == 0 { gsub(/\n/, "") } { printf("%s%s", $0, RT) }' "<File name>" | wc -l'

如果有人帮助解决此问题,我将不胜感激。

【问题讨论】:

  • 您不能在单引号字符串中嵌套单引号。使用"..."(根据需要转义美元符号、双引号和反斜杠),或使用$'...'(根据需要转义单引号和反斜杠)。或者,通过将脚本复制到远程主机并执行它来解决问题。
  • 我有点困惑。您能否在命令@chepner 中具体提及。

标签: unix awk ssh


【解决方案1】:

'gawk -v RS='"' '... 不是包含RS='"' 的字符串。相当于

gawk -v RS="'  '...

shell 不知道您希望第一个和最后一个' 之间的整个字符串应该按字面处理;它从第一个' 读取直到下一个 ',然后继续解析。

此外,没有办法在'...' 中引用单引号,因为反斜杠本身就是字面意思。 '\'' 不是一个单一的';这是'\

如果您使用bash 或具有类似扩展名的shell,您可以使用ANSI 样式的引用。您必须确保所有文字 ''\ 都被转义。

# Should be correct, not not tested
ssh <HOST> $'gawk -v RS=\'"\' \'NR % 2 == 0 { gsub(/\\n/, "") } { printf("%s%s", $0, RT) }\' "<File name>" | wc -l'

或者您可以使用"..." 作为外引号,并确保所有文字$" 都被转义(以及任何\,否则将被视为转义字符)。

# Should be correct, not not tested
ssh <HOST> "gawk -v RS='\"' 'NR % 2 == 0 { gsub(/\n/, \"\") } { printf(\"%s%s\", \$0, RT) }" "<File name>" | wc -l'

我的偏好是通过将代码放在脚本中来避免问题

#!/bin/sh
gawk -v RS='"' 'NR % 2 == 0 { gsub(/\n/, "") } { printf("%s%s", $0, RT) }' "<File name>" | wc -l

复制到远程主机

scp <HOST>:\~/myscript

并执行它

ssh <HOST> 'sh myscript'

【讨论】:

    猜你喜欢
    • 2016-08-25
    • 2016-08-25
    • 2018-10-19
    • 2020-12-27
    • 2013-03-12
    • 2014-08-21
    • 1970-01-01
    • 2013-12-28
    • 2012-04-11
    相关资源
    最近更新 更多