
CLI で bash スクリプトを実行した後、次の出力を受け取ったと仮定します (このテキストはターミナルに表示されます)。
POST https://mycompany.com/ COOKIE='BLABLABLABLABLA' HOST='ANYIPADDRESS' FINGERPRINT='sha256:BLABLABLABLA'
の内容(と
COOKIE
の間のテキストのみ)を別のファイルに保存するにはどうすればよいですか?'
'
さらに、記載されたテキストをこの外部ファイルの特定の位置に貼り付ける必要があります。
既存のファイルの内容は次のようになります。
[global] Name = Name of VPN connection [provider_openconnect] Type = OpenConnect Name = Name of VPN connection Host = IP-address Domain = Domain name OpenConnect.Cookie = >>>INSERT CONTENT OF THE COOKIE HERE<<< OpenConnect.ServerCert = sha256:BLABLABLABLA
そんなことがあるものか?
答え1
これらの種類のものは本質的に一般的なものではなく、アプローチは一般的ですが特定のものです
OpenConnect.Cookie =
行を次のように置き換えたいと仮定します。OpenConnect.Cookie = BLABLABLABLABLA
したがって、最初に必要な文字列を作成するには、次のようにします。
sed -i "s/^OpenConnect.Cookie =.*$/$( command_giving_output | grep 'COOKIE=' | sed "s/COOKIE='//; s/'//g; s/^/OpenConnect.Cookie = /")/" external_filename
ここではコマンド置換を使用して、最初に必要な文字列を作成します
command_giving_output | grep 'COOKIE=' | sed "s/COOKIE='//; s/'//g; s/^/OpenConnect.Cookie = /"
そして、必要な行をこの必要な文字列に置き換えます
sed -i "s/^OpenConnect.Cookie =.*$/output from above command substitution /" external_filename
答え2
次のようなものが使えます:
. <(command | grep "^COOKIE=")
sed -i "s/\(OpenConnect.Cookie\)\s*=.*/\1 = ""$COOKIE""/" file
どこ:
file
質問に記載されている内容を含む既存のファイルです。command
テキストを端末に出力するコマンドです。grep "^COOKIE="
で始まる行を検索しますCOOKIE=
- コマンドの先頭のドットは出力を「ソース」します。つまり、出力はシェル コードとして解釈されます。したがって、変数は
$COOKIE
現在のシェルに設定されます。 - 次に、コマンド
sed
は宛先ファイル内の行を変数の内容に置き換えます$COOKIE
。
答え3
いかがでしょうか
sed -f <(CLI command | sed -n '/COOKIE=\o047/{s//\/OpenConnect.Cookie =\/ s\/= \.*$\/= /; s/.$/\//p;}') file
[global]
Name = Name of VPN connection
[provider_openconnect]
Type = OpenConnect
Name = Name of VPN connection
Host = IP-address
Domain = Domain name
OpenConnect.Cookie = BLABLABLABLABLA
OpenConnect.ServerCert = sha256:BLABLABLABLA
sed
CLI コマンドから関連データを抽出/編集して「スクリプト ファイル」をオンザフライで作成し、2 回目のsed
呼び出しで「プロセス置換」を使用してこのスクリプト ファイルを実行します。
答え4
この回答は@MSaltersさんのコメント。使用されるシェルは Bash です。
prompt% COOKIE=$(./mycmd | grep -Po "(?<=COOKIE=)'[[:alnum:]]+'" | tr -d \')
prompt% echo "$COOKIE" >/tmp/cookie
prompt% sed -i "s:\(OpenConnect.Cookie =\).*:\1 $COOKIE:" file
代替ソリューション(GNUを使用expr
)
このソリューションは、一致する結果が 1 つだけの場合に機能します。
prompt% COOKIE=$(expr "$(./mycmd | grep COOKIE)" : "COOKIE='\([[:alnum:]]\+\)'[[:space:]]*")
prompt% echo "$COOKIE" >/tmp/file
prompt% sed -i "s:\(OpenConnect.Cookie =\).*:\1 $COOKIE:" file