藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月26日 11:18


請教大家一個sed的問題

請問下面一句話是什麼意思
dbaccess database <<EOF 2>/dev/null | sed -e 's/\(.*\) \(.*\)/\2/g'
謝謝

dbaccess database <<EOF 2>/dev/null | sed -e 's/\(.*\) \(.*\)/\2/g'

                                                                               ~~  用這部分替換整句

[mhung@mybsd ~]$cat f.txt|sed -e 's/\(.*\) \(.*\)/\2/g'
bb
dd
[mhung@mybsd ~]$cat f.txt
aa bb
cc dd
[mhung@mybsd ~]$

是將「\(.*\) \(.*\)」用「\2」替換是嗎
這兩個分別代表什麼意思呢
前面的dbaccess database <<EOF又是指數據庫的什麼呢

這是個取系統日期的函數
get_sys_date() {
DBDATE=Y4MD; export DBDATE
dbaccess database <<EOF 2>/dev/null | sed -e 's/\(.*\) \(.*\)/\2/g' | sed -e '
s/\///g'
    select date from sys_gov;
EOF
}

-->

「\(.*\) \(.*\)」是正則表達式


\(.*\)  代表空格前的所有字符
\(.*\)代表空格後的所有字符

-->
看來你很有必要祥讀:
http://www.lslnet.com/linux/#viewthread.php?tid=674903&extra=page%3D1

謹遵教誨
但是我又遇到麻煩了
shell如下
DBDATE=Y4MD; export DBDATE

get_sys_date() {
    DBDATE=Y4MD; export DBDATE
    dbaccess mbps_rundb <<EOF 2>/dev/null | sed -e 's/\(.*\) \(.*\)/\2/g' | sed
-e 's/\///g'
    select clr_date from sys_gov;
EOF
}

CURRENT=`get_sys_date`
echo $CURRENT

dbaccess mbps_rundb <<!

!echo "將批量任務表置為已入帳..."
update mbp_bat_task set btt_status = 1 where 1=1;

!echo "置批量計劃表的上次批扣日期以及狀態..."
select bbp_biz_code from mbp_batch_plan where bbp_start_date = "$CURRENT";

!

執行結果是:
20060522

Database selected.

將批量任務表置為已入帳...

6 row(s) updated.

置批量計劃表的上次批扣日期以及狀態...

  282: Found a quote for which there is no matching quote.
Error in line 1
Near character position 64


Database closed.
????????????????

試解釋:
第一個sed是把以空格分隔成的兩個字符串只留下第二部分
第二個sed是把/去掉

282那一行是說在命令的第64個字符附近的引用在查找的條件裡找不到匹配的



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com