1行に複数の括弧と複数行の間の文字列を印刷します。

1行に複数の括弧と複数行の間の文字列を印刷します。

次の出力ファイルがあり、1行に複数行の中括弧の間に文字列を印刷する必要があります。

入力する:

CLUSQMGR(server1)                      CHANNEL(channel name)
CONNAME(server1.opr.test.company.com(1414))

CLUSQMGR(server2)                      CHANNEL(channel name)
CONNAME(server2.opr.test.company.com(1414))

目的の出力:CLUSQMGRの後の最初の角括弧の文字列とCONNAMEの後の最初の角括弧の文字列が必要です。

server1 server1.opr.test.company.com(1414)
server2 server2.opr.test.company.com(1414)

私は試した:

awk -F'[()]' '{print $2 $3}'

しかし、これを得る:

server1                    CHANNEL
server1.opr.test.company.com1414
server2                    CHANNEL
server2.opr.test.company.com1414

ベストアンサー1

sedあなたに適した場合:

sed '/CLUSQMGR(/!d;s///;N;s/).*\n[^(]*(/ /;s/)$//'

説明する:

  • 主なアイデア:2行はペアで提供されています。したがって、ペアの最初の行を見つけたら、次の行を読んで置き換えて、不要な項目を削除してください。
  • /CLUSQMGR(/!dCLUSQMGR(望ましくない他の行がある場合に備えて、含まれていない行は無視してください。
  • s///最後のパターンを削除します。CLUSQMGR(
  • N改行を含むパターン空間に次の行を追加します。
  • s/).*\n[^(]*(/ /閉じ括弧から2行目の最初の開き括弧まで、すべて空白に置き換えます。これは、改行文字(\n)にパターンを固定し、[^(]*以下を除くすべての項目を一致させることによって行われます。(
  • s/)$//末尾の削除)

おすすめ記事