私が持っているファイルからアイテムを解析しようとしています。grepでこれを行う方法がわかりません ここに構文があります
<FQDN>Compname.dom.domain.com</FQDN>
<FQDN>Compname1.dom.domain.com</FQDN>
<FQDN>Compname2.dom.domain.com</FQDN>
> と < の間のビットだけを吐き出したいのですが、誰か助けてもらえますか? ありがとう
私が持っているファイルからアイテムを解析しようとしています。grepでこれを行う方法がわかりません ここに構文があります
<FQDN>Compname.dom.domain.com</FQDN>
<FQDN>Compname1.dom.domain.com</FQDN>
<FQDN>Compname2.dom.domain.com</FQDN>
> と < の間のビットだけを吐き出したいのですが、誰か助けてもらえますか? ありがとう
Grep isn't what you are looking for. Try sed with a regular expression : http://unixhelp.ed.ac.uk/CGI/man-cgi?sed
あなたが望むようにそれを行うことができますgrep
:
grep -oP '<FQDN>\K[^<]+' FILE
出力:
Compname.dom.domain.com
Compname1.dom.domain.com
Compname2.dom.domain.com
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
他の人が言ったように、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 などでは機能しません。