我有一个名为“ demo.cfg
”的文件,其中包含许多变量:
$VARIABLE_good="milk bread butter water"
$VARIABLE_bad="beer drugs"
$CONTENT_to_buy="Towel mouse bottle glass pen earphones"
$DUMMYVAR_mixed="drugs water bottle glass"
我想在整个文件中搜索项目“ drugs
”,并希望识别出它属于$VARIABLE_bad
。
我想分配$VARIABLE_bad
asbad
和$VARIABLE_good
as good
,$CONTENT_to_buy
as to_buy
,$DUMMYVAR_mixed
asmixed
等。
当我drugs
在此文件中搜索“ ”时,所需的输出应为:
mixed
bad
将来我可能会拥有更多类似上述的变量,因此我需要一种灵活的方法来解决此问题。
我试过:
. demo.cfg "drugs"
(这将导出所有变量)
if [[ $(echo $DUMMYVAR_mixed | grep "drugs") ]]; then echo "mixed"; fi
if [[ $(echo $DUMMYVAR_to_buy | grep "drugs") ]]; then echo "to_buy"; fi
if [[ $(echo $VARIABLE_bad | grep "drugs") ]]; then echo "bad"; fi
if [[ $(echo $VARIABLE_good | grep "drugs") ]]; then echo "good"; fi
但这看起来很长,而且似乎不太灵活。有更好的解决方案吗?
这只是要求awk
。在这种情况下,只有一个=
就行了:
awk -vpat=drugs -F= '$2 ~ pat {gsub(/^\$[A-Z]+_/, "", $1); print $1; }' demo.cfg
-vpat=...
设置匹配中使用的变量:-F=
分隔上的字段=
,$2 ~
第二个字段上的匹配项,并将第一个字段gsub
的初始部分替换为空字符串。然后$1
打印第一个字段。(我假设下半部分的开头部分只有大写字母)。
如果您可以在值中包含等号,则可以从整行中搜索等号和关键字,如下所示:
awk -vpat=drugs -F= '$0 ~ ("=.*" pat) {gsub(/^\$[A-Z]+_/, "", $1); print $1; }' demo.cfg
或者只是手动拆分两个部分,但这会更长一些。
请注意,如果demo.cfg
包含$VARIABLE_good="milk bread butter water"
带有美元符号的配置,则无法在外壳中找到它:
$ . demo.cfg
-bash: =milk bread butter water: command not found
赋值仅取变量的名称,美元符号仅在扩展变量时使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句