|
藍森林 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個字符附近的引用在查找的條件裡找不到匹配的 |
| |