如何提取app.inventory.id命令行参数的值?

时间:2016-03-21 15:19:39

标签: linux shell grep

我有一行:

-Dapp.id=XXX -Dapp.name=YYY -Dapp.inventory.id=KKK -Dapp.inventory1.id=UNDEFINED -app.id=MMM

在inventory.txt 文件中

。如果我使用下面的grep语句,我会得到整行而不是KKK

grep -F app.inventory.id= /cme/apps/install/*/inventory/*.txt

我也试过像-Fx-w这样的标志,但没有任何作用。如何使用grep获取刚刚KKK

6 个答案:

答案 0 :(得分:0)

如果您只想使用grep执行此操作,则可以使用内置PCRE库的grep。例如:

$ pcregrep -o 'app.inventory.id=\K[^[:space:]]+' /tmp/corpus
KKK

或者,如果您没有PCRE可用,则可以将grep与扩展正则表达式一起使用,然后使用cut来使用=作为字段分隔符来获取正确的字段。例如:

$ grep -Eo 'app.inventory.id=\K[^[:space:]]+' /tmp/corpus | cut -d= -f2
KKK

答案 1 :(得分:0)

如果所有文件具有相同类型的输出,则意味着:

-Dapp.id=VALUE -Dapp.name=VALUE -Dapp.inventory.id=VALUE -Dapp.inventory1.id=VALUE [...]

然后您可以像这样使用awk:

grep -F app.inventory.id= /cme/apps/install/*/inventory/*.txt | awk -F ' ' '{print $3}' | awk -F '=' '{print $2}

答案 2 :(得分:0)

我认为sed在这里更好一点:

sed -n 's/.*-Dapp.inventory.id=\([^ ]*\).*/\1/gp' /cme/apps/install/*/inventory/*.txt

如果您想要文件名,可以执行类似

的操作
for filename in /cme/apps/install/*/inventory/*.txt; do 
    sed -n -e 's/.*-Dapp.inventory.id=\([^ ]*\).*/'$filename': \1/gp' $filename; 
done

答案 3 :(得分:0)

containerURLForSecurityApplicationGroupIdentifier()

<强>的grep

  • -E使用扩展正则表达式,
  • -o仅输出匹配
  • com.apple.security.application-groups将大写字母与下一个空格匹配

要查看匹配项: grep -Eo "\s-Dapp.inventory.id=[A-Z]+\s" inventory.txt | cut -d '=' -f2

<强>切

  • -d --delimiter =字段的DELIM分隔符,
  • -f --fields = LIST仅输出所选字段

答案 4 :(得分:0)

requestStateForRegion救援!

awk

答案 5 :(得分:0)

awk -F '[= ]' '{print $6}' file
KKK