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

私はこれについて非常に新しいものなので、どんな助けにも感謝します。

また、上記のカールコマンド全体が変数の一部であるため、分割できないことを強調したいと思います。文字列が長く、交換する必要があります。/その後pt'-d

答え1

使用できる sed モードは次のとおりです。

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

これは次のことを意味します。S/「グローバル」に置き換えます%2F。sedでは通常s/foo/bar/g構文が表示されますが、区切り文字は別の文字である可能性があります。エスケープを避けるために代わりに/aを使用しました|

これをコマンドに統合するには(使用bash)サブシェルを使用できます。

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/...")交換する必要がある部分に以前の主張を入れました。

ご意見から変数に入れたいとおっしゃいました。これは可能です。この場合、単にサブシェルの外側のスペースをエスケープしてこれを達成しました。

$ 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

関連情報