linux的id的参数,关于linux:如何提取app.inventory.id命令行参数的值?
本问题已经有最佳答案,请猛点这里访问。我有一条线:-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/i
本问题已经有最佳答案,请猛点这里访问。
我有一条线:
-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?
我知道这是一个糟糕的事情,但请改用sed或awk。 它可以让你控制打印哪个部分。 grep也将使用-o,但它也将包含-D...部分。
你可以使用选项:grep -o
awk -F '[= ]' '{print $6}' file
KKK
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
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 --delimiter =字段的DELIM分隔符,
-f --fields = LIST仅输出所选字段
我认为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
谢谢你的帮助 - 工作得很好
我得到了sed的值,是否有可能得到sed操作的文件名? 我在该路径中有多个.txt文件。 请帮帮我
我添加了一种获取文件名的方法。
谢谢你的帮助。
如果所有文件具有相同类型的输出,则意味着:
-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}
如果您只想使用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
更多推荐
所有评论(0)