从变量中的一个句子中提取一个单词

从变量中的一个句子中提取一个单词

我有一个包含以下值的变量:|| InstanceId | i-0f85cb9ccb11fd035 ||

该变量是动态生成的,我需要从该变量中提取 InstanceId 值。

实例 ID 始终以单管道和双管道开头,I-或者位于单管道和双管道之间。

尝试在 MacOS bash 脚本上使用 grep 来执行此操作。如有任何帮助,不胜感激。

答案1

要替换字符串,您需要使用sed。操作方法如下。

$ var="|| InstanceId | i-0f85cb9ccb11fd035 ||"
$ printf '%s\n' "$var" | sed -r 's/\|\|[^\|]+\| [iI]-([^ ]+) \|\|/\1/g'

's/\|\|[^\|]+\| [iI]-([^ ]+) \|\|/\1/g'是您需要了解的模式。

s/something/replacement/g意思是用“替换”来替换任何出现的“某物”。

\|只是一个转义的管道字符。

因此,我们要查找两个竖线,后跟[^\|]+,即一串一个或多个非竖线字符。后跟另一个竖线和一个空格,\|。然后我们匹配i-I-,读取一串非空格字符,使用括号将它们分组,([^ ]+)后跟空格和两个竖线\|\|

然后我们用第一组替换这整个东西,也就是\1

相关内容