最初の文字位置に名前を持つファイルがあります。すべての名前を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 > 1
1つ以上のフィールド()を含む行のみを印刷するか、(
または:で)
始まる行は無視します^\(|\)
。
答え3
すべての入力ファイルの形式が同じ場合、単純なawkソリューションの場合:
awk '/^[a-Z]/ {print $1}' filename
carrat( ^
) を使用すると、各行の先頭に 1 文字のエントリのみが選択されます。その後、最初のフィールドのみが印刷され、無視されます=
。