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


    

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


請教一個sed的用法

有一文件,內容大概如下:
$cat test.dat
611111001
正在與後台通訊,請稍候...
--下載失敗(與主機聯接失敗), 請重試

611111003
正在與後台通訊,請稍候...
--下載成功
...........

611111002
正在與後台通訊,請稍候...
--下載失敗(與主機聯接失敗), 請重試

611111005
正在與後台通訊,請稍候...
--下載成功
............

611111009
正在與後台通訊,請稍候...
--下載成功
...........

"下載成功"後的.............表示後面有很多行,
現在我想要得"下載失敗"的行和該行上面的數字行,需要得到的結果如下
611111001
--下載失敗(與主機聯接失敗), 請重試

611111002
--下載失敗(與主機聯接失敗), 請重試

請教該如何用啊,找了些資料,但還做不出上面的結果

-->

請教一個sed的用法

grep '下載失敗' -B1

請教一個sed的用法

sed -n 'N;/下載失敗/P;D'

好像sed1line裡有?記不清了

請教一個sed的用法

我的sco unix5.0.5 grep 沒有-B
grep: -C illegal option
grep [-E|-F] [-c|-l|-q] [-bhinsvx] [-e pattern_list] [-f pattern_file] [pattern_
list] [file...]

所以grep '下載失敗' -B1 不行

sed -n 'N;/下載失敗/P;D'
得到的結果是
正在與後台通訊,請稍候...
--下載失敗(與主機聯接失敗), 請重試
正在與後台通訊,請稍候...
--下載失敗(與主機聯接失敗), 請重試

不是我想要的那個結果

請教一個sed的用法

你想要啥結果 :?: :mrgreen:

請教一個sed的用法

原文如下
$cat test.dat
611111001
正在與後台通訊,請稍候...
--下載失敗(與主機聯接失敗), 請重試

611111003
正在與後台通訊,請稍候...
--下載成功
...........

611111002
正在與後台通訊,請稍候...
--下載失敗(與主機聯接失敗), 請重試

611111005
正在與後台通訊,請稍候...
--下載成功
............

611111009
正在與後台通訊,請稍候...
--下載成功
...........

"下載成功"後的.............表示後面有很多行,
想要得的的結果是,得到"下載失敗"的行和該行上面的數字行,如下
61111001
--下載失敗(與主機聯接失敗), 請重試

611111002
--下載失敗(與主機聯接失敗), 請重試

請教一個sed的用法

sed的不會,用一個awk的 :oops:
[code]awk '{if($0~/^[0-9]/) {number=$0;}if($0~/重試/) {print number;print $0}}' yourFile[/code]

請教一個sed的用法

果然可以了,太謝謝了,呵呵,總算是看懂了這個shell
又學到一招了,先將我要的數值行存在變量number,
再判斷是否有"重試"行,如果有就print 數值行和這行失敗行
GOOD!!!



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