我有檔案,其中包含檔案中的以下字串。
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/undotbs01.dbf';
使用 bash 方法,我想將第二個“undotbs01.dbf”替換為另一個名稱。當我使用 grep 和 sed 執行此操作時,它會將檔案中的所有 undotbs01 單詞更改為新值。但我只需要更改第二個 undotbs(位于“TO”字之后)。
uj5u.com熱心網友回復:
通過sed反向參考,這就是我的建議:
$ cat in
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/undotbs01.dbf';
$ sed -e "s,\(.*/\).*\(dbf.*\),\1newname.\2," < in
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/newname.dbf';
這使用了第一個.*模式的貪婪性(即它想盡可能多地匹配)。
uj5u.com熱心網友回復:
推薦一個awk腳本:
awk 腳本:
awk '{sub(".*",str,$(NF-1));print}' FS="'" OFS="'" str="123"
結果是:
awk '{sub(".*",str,$(NF-1));print}' FS="'" OFS="'" str="123" <<< $(echo "ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/undotbs01.dbf';")
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '123';
指示:
將替換字串str="value"或變數名 $varstr="$var"
解釋
FS="'" 將awk欄位分隔符設定為'
OFS="'" 將awk輸出欄位分隔符設定為'
sub(".*",str,$(NF-1)) 用值替換/替換(最后一個欄位 - 1)的str值。最后一個欄位$FN是終止;
uj5u.com熱心網友回復:
使用sed
sed 's/undotbs01\.dbf/new_value/2' input_file
ALTER DATABASE RENAME FILE '/home/oracle/oradata/undotbs01.dbf' TO '/home/oracle/oradata/new_value';
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/455243.html
