Shell-Script
使用匹配兩行的 sed 添加行
我有一個像下面這樣的文件
SID_LIST_LISTENER_DG = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = DRCDBDB_DGMGRL) (ORACLE_HOME = /ofa/u1002/18C_DB_HOME) (SID_NAME = DRCDBDB1) ) (SID_DESC = (GLOBAL_DBNAME = DRNONCDB_DGMGRL) (ORACLE_HOME = /ofa/u1002/18C_DB_HOME) (SID_NAME = DRNONCDB1) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = DRTESTDB) (ORACLE_HOME = /ofa/u1002/18C_DB_HOME) (SID_NAME = DRTESTDB1) ) (SID_DESC = (GLOBAL_DBNAME = DRMIGDB) (ORACLE_HOME = /ofa/u1002/18C_DB_HOME) (SID_NAME = DRMIGDB1) ) (SID_DESC = (GLOBAL_DBNAME = DRNONCDB) (ORACLE_HOME = /ofa/u1002/18C_DB_HOME) (SID_NAME = DRNONCDB1) ) )
我正在使用以下命令在文件中添加以下行。但是由於我有兩條相同的匹配行,因此在兩者上都添加了以下行。
sed -i '/SID_LIST =/a \ \ \ \ (SID_DESC = \n \ \ \ \ \ (GLOBAL_DBNAME = DB11G) \n \ \ \ \ \ (ORACLE_HOME = /ofa/u1002/18C_DB_HOME) \n \ \ \ \ \ (SID_NAME = DB11G1) \n \ \ \ )' /tmp/listener.ora
現在我只需要
"SID_LIST_LISTENER = (SID_LIST ="
在行後添加如何使用sed匹配兩行
您可以使用簡單的正
/^...
則表達式匹配第一行,然後使用括號塊檢查第二行。sed '/^SID_LIST_LISTENER =$/{ N ; /\n\s*(SID_LIST =$/ a _line(s) to append _ ; }'
N
讀取下一行輸入,附加到您已有的輸入,並且/\n...
僅在連接處匹配。在所有不匹配的情況下,輸入仍將不加修改地列印。嘗試使用 追加行時
a\
,將其全部放入腳本文件可能更容易:/^SID_LIST_LISTENER =$/{ N ; /\n\s*(SID_LIST =$/ a\ (SID_DESC =\ (GLOBAL_DBNAME = DB11G)\ (ORACLE_HOME = /ofa/u1002/18C_DB_HOME)\ (SID_NAME = DB11G1)\ ) ; }
並呼叫它
sed -f addlines.sed
另請注意,如果您的輸入包含兩個連續的“第一行”,則此常式將不起作用,即。
SID_LIST_LISTENER = SID_LIST_LISTENER = (SID_LIST =
因為第一場比賽將“用完”第二場比賽;但考慮到您輸入的結構,我認為這不會發生。