Shell出力で下に強調表示された行を切り取る方法

Shell出力で下に強調表示された行を切り取る方法

シェル出力で下に強調表示された行を切り取る方法。ソースシェルプログラムは出力の下にあります。

$ ./checkhome.sh

Oracle Baseは変更されずにそのまま残り、値は/opt/oracleです。

/opt/oracle/app/oracle/product/12.1.0 にインストールされているデータベース DB1 に接続します。

Oracleライブラリが/opt/oracleから/opt/oracle/app/oracleに変更されました。

/opt/oracle/app/oracle/product/11.2.0 にインストールされているデータベース DB2 に接続します。

Oracleライブラリが/opt/oracle/app/oracleから/opt/oracleに変更されました。

/opt/oracle/app/oracle/product/12.1.0 にインストールされているデータベース DB3 に接続します。

$**

スクリプト内容

$ cat checkhome.sh

DB=`ps -ef |grep pmon | grep -v grep |awk '{print $8}'|cut -d '_' -f3`

for i in `echo $DB`    
do    
    export ORACLE_SID=$i    
    export ORAENV_ASK=NO    
    . oraenv $i    
    echo "Connecting Database $i is Installed on $ORACLE_HOME"    
done

exit

答え1

テキストをフィルタリングする最も簡単な方法の1つは、reverse grep(from man grep)を使用することです。

   -v, --invert-match
          Invert the sense of matching, to select non-matching lines.  (-v
          is specified by POSIX.)

あなたの場合、^行の先頭のみを一致させ、-v一致しない行を印刷して、「Oracleベース」で始まるすべての行を除外できます。

./checkhome.sh | grep -v "^The Oracle base" 

場合によっては、これらのメッセージは標準出力ではなく標準エラーとして出力されます。これは単にSTDERRを次にリダイレクトすることを意味します/dev/null

./checkhome.sh 2>/dev/null

関連情報