假设我在 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
这怎么可能?
这些类型的东西本质上不是通用的,但具体的方法是通用的
我假设,你想
OpenConnect.Cookie =
用OpenConnect.Cookie = BLABLABLABLABLA
因此,要首先创建所需的字符串,您可以使用
在这里,我使用命令替换首先创建所需的字符串
然后用这个必需的字符串替换必需的行
您可以使用 bash 的 read 和 的组合来读取 cookie
grep
:这使用进程替换来提供 to 的
some-command | grep '^COOKIE')
输出read
。使用IFS="='"
,我们将输入拆分为'
,丢弃拆分 (COOKIE=
) 的第一个元素(以及结束引号之后的任何剩余文本),同时将第二个元素保存在cookie
变量中。然后我们可以使用
sed
来替换文本:不过,这取决于不包含特殊字符的 cookie 文本
&
。你可以使用:
在哪里:
file
是现有文件,其内容如问题中所述。command
是将文本打印到终端的命令。grep "^COOKIE="
搜索以COOKIE=
$COOKIE
在当前 shell 中设置。sed
命令将目标文件中的行替换为变量的内容$COOKIE
。怎么样
sed
它通过从 CLI 命令中提取/处理相关数据来动态创建“脚本文件”,并在第二次sed
调用中使用“进程替换”执行此脚本文件。此答案基于@MSalters的评论。使用的外壳是 Bash。
替代解决方案(使用 GNU
expr
)如果只有一个匹配结果,则此解决方案有效。