ファイル内の文字列を一致させる方法は、文字列が最初のフィールドにある場合にのみ可能ですか?
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
明らかに、ある種の複雑なデータ構造がある場合は、変更する必要があります。