我有这个命令,我需要更新/仅在那之后点-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替换/
为%2F
global"。在 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