簡體   English   中英

在 Bash 腳本中操作 spool 命令輸出

[英]Manipulate spool command output in Bash Scripting

我正在使用 spool 從 bash 腳本運行 sql 查詢並獲得以下輸出。

#!/bin/bash

/usr/lib/oracle/12.2/client64/bin/sqlplus -s esg/esg << EOF
spool /tmp/test

< SOME SELECT QUERY >

spool off;
EOF
exit;

我得到如下輸出:

cat /tmp/test


TABLESPACE_NAME          USED_PCT
------------------------------ ----------
TEMP_TBS1                  23
SYSAUX                     4
GTEMP                      3
SYSTEM                     3
UNDOTBS2                   0
UNDOTBS1                   0
TEMP                       0
USERS                      0
DATA_TBS1                  23
INDEX_TBS1                 11

10 rows selected.

我想擺脫除值之外的所有內容,即,我不想要標題、“--”、“選擇 10 行”和當然的空白行。 這看起來像下面

TEMP_TBS1                  23
SYSAUX                     4
GTEMP                      3
SYSTEM                     3
UNDOTBS2                   0
UNDOTBS1                   0
TEMP                       0
USERS                      0
DATA_TBS1                  23
INDEX_TBS1                 11

這不是真正的 shell 問題,但在您的 heredoc 中,在 spool 之前,添加一些 SQL*Plus 格式化命令; 例如:

/usr/lib/oracle/12.2/client64/bin/sqlplus -s esg/esg << EOF
set feedback off
set pagesize 0
set trimspool on
spool /tmp/test
...

pagesize設置為零“抑制 [es] 所有標題、分頁符、標題、初始空行和其他格式信息”。

設置反饋關閉會刪除所有反饋,如“選擇 10 行”。

文檔中有set命令的摘要。 還有一個關於格式化 SQL*Plus 報告的部分

我建議使用 Alex 的解決方案 - 但如果您確實希望在假脫機日志中包含所有輸出,並且只想刪除其他內容的相關位,請嘗試sed ,這將允許圖層條件。

$: sed -n '/^---/,/^$/{ /^[A-Z]/p }' test
TEMP_TBS1                  23
SYSAUX                     4
GTEMP                      3
SYSTEM                     3
UNDOTBS2                   0
UNDOTBS1                   0
TEMP                       0
USERS                      0
DATA_TBS1                  23
INDEX_TBS1                 11

打破它:

sed -n表示除非明確訂購,否則不要打印任何內容。
/^---/,/^$/表示僅在此范圍內的行上執行以下命令。
{ ... }表示在前一個條件適用時應用大括號的內容,因此由於前一個條件是范圍選擇,這允許在范圍內的每一行上共同執行多個命令。
/^[AZ]/p表示僅當第一個字符是大寫字母時才打印。

總的來說,所有這些都表示“對於破折號和空行之間的行,當且僅當它們以大寫字母開頭時才打印”。 其他一切都將被忽略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM