如何匹配文件中的字符串,但前提是该字符串位于第一个字段中?
param=hbase.tmp.dir
cat file | grep $param
"hbase.local.dir" : "${hbase.tmp.dir}/local",
"hbase.tmp.dir" : "/var/lib/ambari-metrics-collector/hbase-tmp",
"hbase.zookeeper.property.dataDir" : "${hbase.tmp.dir}/zookeeper",
"phoenix.spool.directory" : "${hbase.tmp.dir}/phoenix-spool",
我的预期输出是:
"hbase.tmp.dir" : "/var/lib/ambari-metrics-collector/hbase-tmp",
答案1
使用awk
:
awk '($1=="PATTERN")' infile.txt
当您的字段由空格分隔时,上面是正确的,如果不是,则可以使用-F
选项提及。
如果在变量中设置了 PATTERN 匹配,则应该使用 option 告诉它 awk -v
。
awk -v param="PATTERN" '($1==param)' infile.txt
也可以基于是否包含带有 的 PATTERN 来获取~
。
awk -v param="PATTERN" '/$1 ~ param/' infile.txt
或者也grep
可以使用。
grep '^PATTERN.*[^:]'
答案2
如果输入数据是 JSON(看起来很像),则可以使用jq
:
$ jq -r '."hbase.tmp.dir"' file.json
/var/lib/ambari-metrics-collector/hbase-tmp
显然,如果存在任何类型的复杂数据结构,则可能必须对其进行修改。