0

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

如何使用 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 足够强大,可以在一行中完成此操作,但我找不到可以帮助我自己完成此操作的示例。

提前致谢!日本医学会

4

4 回答 4

1

您可以使用:

grep -o -P "MdcFile.*" cube.mdl | awk -F\" '{ print $2 }'

这将使用grep' 正则表达式仅返回MdcFile当前行中的所有内容。然后,awk将使用 the"作为分隔符并仅打印第二个单词 - 这将是您的“in-quotes”单词,当然没有引号返回。

选项-o--only-matching指定仅返回匹配的文本匹配,而-P--perl-regexp指定模式是 Perl-Regex 模式。似乎某些版本的 grep 不包含这些选项。OP 的版本是不包含它们的版本,但以下似乎对他有用:

grep "MdcFile.*" cube.mdl | awk -F\" '{ print $2 }'
于 2012-08-17T21:18:33.733 回答
0
grep MdcFile cube.mdl | awk '{print $5}'

会这样做,假设这些位中的任何一个都没有空格来排除位置计数。

于 2012-08-17T21:10:14.020 回答
0

这可能会做到。

sed -n '/MdcFile / s/.*MdcFile "\(\[^"\]\+\)".*/\1/;/MdcFile / p' INPUTFILE
于 2012-08-17T21:12:05.083 回答
0

使用作为记录分隔符awk的整个事情:"

awk -v RS='"' '/MdcFile/ { getline; print }' cube.mdl
于 2012-08-18T12:27:47.217 回答