如何从 Shell 输出中修剪下面突出显示的行。源 shell 程序位于输出下方。
$ ./checkhome.sh
Oracle 基数保持不变,值为 /opt/oracle
连接数据库 DB1 安装在 /opt/oracle/app/oracle/product/12.1.0
Oracle 库已从 /opt/oracle 更改为 /opt/oracle/app/oracle
连接数据库 DB2 安装在 /opt/oracle/app/oracle/product/11.2.0
Oracle 库已从 /opt/oracle/app/oracle 更改为 /opt/oracle
连接数据库 DB3安装在/opt/oracle/app/oracle/product/12.1.0
$ **
脚本内容
$ 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
过滤文本的最简单方法之一是使用反向grep
(来自man grep
):
-v, --invert-match
Invert the sense of matching, to select non-matching lines. (-v
is specified by POSIX.)
在您的情况下,您可以通过^
仅匹配行的开头并-v
打印不匹配的行来排除以“The Oracle base”开头的所有行:
./checkhome.sh | grep -v "^The Oracle base"
请注意,在某些情况下,这些消息会打印到标准错误而不是标准输出,这意味着只需将 STDERR 重定向到/dev/null
就足够了:
./checkhome.sh 2>/dev/null