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を区切り文字として使用し"、2 番目の単語のみを出力します。これは、もちろん引用符なしで返される「引用符内」の単語になります。

オプション-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

これはそれをするかもしれません。

sed -n '/MdcFile / s/.*MdcFile "\(\[^"\]\+\)".*/\1/;/MdcFile / p' INPUTFILE
于 2012-08-17T21:12:05.083 に答える
0
grep MdcFile cube.mdl | awk '{print $5}'

これらのビットのいずれにも位置カウントを破棄するスペースがないと仮定すると、それが行われます。

于 2012-08-17T21:10:14.020 に答える
0

レコード区切りとしてawk全体に使用します。"

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