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