1

私が持っているファイルからアイテムを解析しようとしています。grepでこれを行う方法がわかりません ここに構文があります

<FQDN>Compname.dom.domain.com</FQDN>

<FQDN>Compname1.dom.domain.com</FQDN>

<FQDN>Compname2.dom.domain.com</FQDN>

> と < の間のビットだけを吐き出したいのですが、誰か助けてもらえますか? ありがとう

4

4 に答える 4

1

Grep isn't what you are looking for. Try sed with a regular expression : http://unixhelp.ed.ac.uk/CGI/man-cgi?sed

于 2012-10-03T20:44:05.250 に答える
1

あなたが望むようにそれを行うことができますgrep

grep -oP '<FQDN>\K[^<]+' FILE

出力:

Compname.dom.domain.com
Compname1.dom.domain.com
Compname2.dom.domain.com
于 2012-10-03T20:47:53.520 に答える
1

grep は、いくつかのテキスト抽出を行うことができます。ただし、これがあなたが望むものかどうかはわかりません:

grep -Po "(?<=>)[^<]*"

テスト

kent$  echo "<FQDN>Compname.dom.domain.com</FQDN>
dquote> 
dquote> <FQDN>Compname1.dom.domain.com</FQDN>
dquote> 
dquote> <FQDN>Compname2.dom.domain.com</FQDN>"|grep -Po "(?<=>)[^<]*"
Compname.dom.domain.com
Compname1.dom.domain.com
Compname2.dom.domain.com
于 2012-10-03T20:48:26.373 に答える
1

他の人が言ったように、grep はこのための理想的なツールではありません。でも:

$ echo '<FQDN>Compname.dom.domain.com</FQDN>' | egrep -io '[a-z]+\.[^<]+'
Compname.dom.domain.com

grep の目的は、ものを一致させることです。オプションは、-o一致したものを示します。返される式の一部ではない正規表現条件を作成するには、先読みまたは後読みを使用する必要があります。これは、ERE ではなく PCRE の一部であるため、ほとんどのコマンドライン grep ではサポートされていません。

$ echo '<FQDN>Compname.dom.domain.com</FQDN>' | grep -Po '(?<=>)[^<]+'
Compname.dom.domain.com

この-Pオプションはほとんどの Linux 環境で機能しますが、*BSD、OSX、Solaris などでは機能しません。

于 2012-10-03T20:49:22.380 に答える