シェル出力で下に強調表示された行を切り取る方法。ソースシェルプログラムは出力の下にあります。
$ ./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