テキストファイルから名前をフィルタリングする

テキストファイルから名前をフィルタリングする

最初の文字の位置に名前があるファイルがあります。すべての名前を grep する方法を探しています。ここでは、たとえば BUBBA と SUSAN という名前をリストに表示したいとします。

BUBBA =

 (DESCRIPTION =
 (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = bubba01)(PORT = xxxx))
  )
  (CONNECT_DATA =
  (SERVICE_NAME = bubba01)
  )
 )

SUSAN =

 (DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = susan01)(PORT = xxxx))
   )
   (CONNECT_DATA =
     (SID = susandb)
   )
  )

答え1

あなたが望んでいるのは、次のことのようです:

grep -o '^[A-Z]\+'

-oは、行の一致する部分のみを出力することを意味し、正規表現は行の先頭の 1 つ以上の大文字のシーケンスと一致します。

この種のことは を使って行うこともできます。これはこの例では複雑すぎますが、より複雑なマッチングや変換を行う必要がある場合には便利です (また やsedよりも単純です)。awkperl

sed -n '/^[A-Z]\+/{s/^\([A-Z]\+\).*/\1/;p}'

答え2

使用方法awk:

awk 'NF > 1 && $1 !~ /^\(|\)/ {print $1}' file

少なくとも 1 つのフィールド ( NF > 1) を持つ行のみを印刷し、または(:)で始まる行は無視します^\(|\)

答え3

すべての入力ファイルが同じ形式である場合、単純な awk ソリューションは次のようになります。

awk '/^[a-Z]/ {print $1}' filename

キャラット ( ^) を使用すると、各行の先頭に文字があるエントリのみが選択されます。次に、 を無視して最初のフィールドのみを印刷します=

関連情報