使用 SED 命令在模式匹配后替换 /

使用 SED 命令在模式匹配后替换 /

我有这个命令,我需要更新/仅在那之后点-d,它应该替换为“%2F”

curl -X GET --header 'Accept: application/json' 'http://abc.abc:8080/api/server/sendUnixCommand?command=pt' -d "/abc/abc/abc/abc-abc/abc/abc/" ls

我对此很陌生,因此非常感谢您的帮助。

还想强调上面的整个curl命令将是变量的一部分,所以我不能拆分它。这将是一个长字符串,我需要替换它/仅在那之后pt'-d

答案1

您可以使用的 sed 模式是:

sed 's|/|%2F|g'

这意味着: ”s替换/%2Fglobal"。在 sed 中,您通常会看到s/foo/bar/g语法,但分隔符也可以是其他字符。为了避免转义/,我使用了 a|代替。

要将其集成到您的命令中(使用bash),您可以使用子 shell。

curl \
  -X GET \
  --header 'Accept: application/json' \
  'http://abc.abc:8080/api/server/sendUnixCommand?command=pt' \
  -d "$(sed 's|/|%2F|g' <<< "/abc/abc/abc/abc-abc/abc/abc/")" \
  ls

在这种情况下,我把$(sed 's|/|%2F|g' <<< "/abc/abc/...")你的旧论点放在需要替换的地方。

在您的评论中,您说您希望将其放在变量中。这是可能的。在这种情况下,我通过简单地转义子 shell 之外的空格来实现这一点:

$ VAR=curl\ -X\ GET\ --header\ 'Accept: application/json'\ 'http://abc.abc:8080/api/server/sendUnixCommand?command=pt'\ -d\ "$(sed 's|/|%2F|g' <<< "/abc/abc/abc/abc-abc/abc/abc/")"\ ls
$ echo $VAR
curl -X GET --header Accept: application/json http://abc.abc:8080/api/server/sendUnixCommand?command=pt -d %2Fabc%2Fabc%2Fabc%2Fabc-abc%2Fabc%2Fabc%2F ls

相关内容