unix bash - 从文件中提取一行

时间:2012-08-17 21:05:53

标签: bash unix scripting awk grep

需要你的帮助!!!我试着寻找这个,但无济于事。

如何使用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

4 个答案:

答案 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