Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何提取app.inventory.id命令行参数的值?_Linux_Shell_Grep - Fatal编程技术网

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

Linux 如何提取app.inventory.id命令行参数的值?,linux,shell,grep,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这样的标志,但没有任何效果。如何使用

我对以下方面有意见:

-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获取just
KKK

如果要使用just-grep,可以使用内置PCRE库的grep。例如:

$ pcregrep -o 'app.inventory.id=\K[^[:space:]]+' /tmp/corpus
KKK
$ grep -Eo 'app.inventory.id=\K[^[:space:]]+' /tmp/corpus | cut -d= -f2
KKK
或者,如果没有可用的PCRE,可以将grep与扩展正则表达式一起使用,然后使用cut通过使用
=
作为字段分隔符来获取正确的字段。例如:

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

如果所有文件的输出类型相同,则表示:

-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}

我认为
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
grep-Eo”\s-Dapp.inventory.id=[A-Z]+\s“inventory.txt | cut-d'='-f2

grep

  • -E使用扩展正则表达式
  • -o仅输出匹配项
  • [A-Z]+\s
    将大写字母与下一个空格匹配
要观看比赛:
grep--color-Eo“\s-Dapp.inventory.id=[A-Z]+\s”inventory.txt

切割

  • -d--分隔符=字段的DELIM分隔符
  • -f--字段=仅列出所选字段的输出

    • awk
      救援

      $ echo -Dapp.id=XXX -Dapp.name=YYY -Dapp.inventory.id=KKK -Dapp.inventory1.id=UNDEFINED -app.id=MMM | 
        awk -v RS=' +' '/app.inventory.id/{split($0,a,"=");print a[2]}'
      
      KKK
      

      我知道这是一个蹩脚的说法,但请使用
      sed
      awk
      。它将让您控制打印哪个部分
      grep
      也将使用
      -o
      ,但它也将包括
      -D..
      部分。您可以使用选项:grep-oThanks为您提供帮助-工作过的greati正在获取sed的值,是否可以获取操作sed的文件名?我在该路径中有多个.txt文件。请帮帮我我也添加了一种获取文件名的方法。谢谢你的帮助。