テキストファイルでの名前のフィルタリング

テキストファイルでの名前のフィルタリング

最初の文字位置に名前を持つファイルがあります。すべての名前を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以下を使用してこれらのタスクをawk実行することもできます。perl

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

答え2

使用awk:

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

NF > 11つ以上のフィールド()を含む行のみを印刷するか、(または:で)始まる行は無視します^\(|\)

答え3

すべての入力ファイルの形式が同じ場合、単純なawkソリューションの場合:

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

carrat( ^) を使用すると、各行の先頭に 1 文字のエントリのみが選択されます。その後、最初のフィールドのみが印刷され、無視されます=

関連情報