Linux

如何匹配文件中的字元串,但前提是字元串在第一個欄位中?

  • August 22, 2017

如何匹配文件中的字元串,但前提是字元串在第一個欄位中?

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",

使用awk

awk '($1=="PATTERN")' infile.txt

當您的欄位由空格分隔時,上面是正確的,如果不是,它可以用-F選項提及。

如果在變數中設置了 PATTERN 匹配,您應該使用選項告訴它 awk -v

awk -v param="PATTERN" '($1==param)' infile.txt 

也可以基於是否包含 PATTERN 和~.

awk -v param="PATTERN" '/$1 ~ param/' infile.txt

或者也grep可以使用。

grep '^PATTERN.*[^:]'

如果輸入數據是 JSON(看起來很像),可以使用jq

$ jq -r '."hbase.tmp.dir"' file.json
/var/lib/ambari-metrics-collector/hbase-tmp

顯然,如果存在任何類型的複雜資料結構,則可能必須對其進行修改。

引用自:https://unix.stackexchange.com/questions/387423