需要你的帮助!!!我试着寻找这个,但无济于事。
如何使用bash实现以下目标?
我有一个名为“cube.mdl”的平面文件,其中包含:
[...]
bla bla bla bla lots of lines above
Cube 8007841 "BILA_" MdcFile "BILA_CO_PM_MKT_BR_CUBE.mdc"
bla bla bla more lines below
[...]
我需要打开该文件,查找单词“MdcFile”并获取引号之间的字符串,即BILA_CO_PM_MKT_BR_CUBE.mdc
我知道AWK或者grep足够强大,可以在一行中执行此操作,但我找不到可以帮助我自己完成此操作的示例。
提前致谢! JMA
答案 0 :(得分:1)
您可以使用:
grep -o -P "MdcFile.*" cube.mdl | awk -F\" '{ print $2 }'
这将使用grep
的正则表达式仅在当前行中返回MdcFile
及其后的所有内容。然后,awk
将使用"
作为分隔符,并仅打印第二个单词 - 这将是您的“引号内”单词,当然没有引号返回。
选项-o
,--only-matching
指定仅返回匹配的文本和-P
,--perl-regexp
指定模式是Perl-Regex模式。似乎某些版本的grep不包含这些选项。 OP的版本是一个不包含它们的版本,但以下似乎适合他:
grep "MdcFile.*" cube.mdl | awk -F\" '{ print $2 }'
答案 1 :(得分:0)
grep MdcFile cube.mdl | awk '{print $5}'
会这样做,假设这些位中没有空格来甩掉位置数。
答案 2 :(得分:0)
这可能会这样做。
sed -n '/MdcFile / s/.*MdcFile "\(\[^"\]\+\)".*/\1/;/MdcFile / p' INPUTFILE
答案 3 :(得分:0)
将awk
作为记录分隔符使用"
作为整个事物:
awk -v RS='"' '/MdcFile/ { getline; print }' cube.mdl