Grep如何抓取前一行後兩行 - Linux

By Dinah
at 2011-11-26T20:42
at 2011-11-26T20:42
Table of Contents
※ 引述《zchien (小建)》之銘言:
: ※ 引述《zchien (小建)》之銘言:
: : 不好意思...我使用的是UNIX系統
: : 我想請問一下...
: : 我記得抓關鍵字"AAA"..單行的指令應該是
: : grep "AAA" data.txt > result.txt
: : 會搜尋data.txt內的"AAA"的那行關鍵字...並且存在result.txt
: : 但是我希望能夠取這關鍵字的前一行...和後兩行...(包含AAA的關鍵字那行)
: : 總共需要四行...請問要如何用...
: : 有網友提供過...加入-B1 -A2參數...可以達成...
: : 但是我測試過 grep -B1 -A2 "*AAA*" data.txt > result.txt
: : 但是系統卻顯示無法辨識...-B1 -A2...
: : 而且我測試 man grep 也找不到..(但可能我英文不好..)_
: : 想請各位網友...在提供一下...是否有其他方法...
: : 還是有其他指令可以達成呢 ...謝謝
: 不好意思...重新提我一年前問過的問題
: 因為我目前還沒找到答案
: 我是用SunOS5.10
: 指令好像沒有支援grep -B1 -A2
: 有其他方式嗎
: awk或是sed有辦法達到這功能嗎
grep -B1 -A2 "*AAA*" data.txt > result.txt
參考看看 grepab.sh
----------------------沿虛線剪下-----------------------------
greplinenumbers=`grep -E "*AAA*" -n data.txt | cut -d : -f 1`
rm displaylines.txt > null 2>&1
for getline in $greplinenumbers
do
expr $getline - 1 >> displaylines.txt
expr $getline >> displaylines.txt
expr $getline + 1 >> displaylines.txt
expr $getline + 2 >> displaylines.txt
done
displaylinenumbers=`cat displaylines.txt`
rm result.txt > null 2>&1
for getline in $displaylinenumbers
do
sed -n "$getline p" data.txt >> result.txt
done
----------------------沿虛線剪下-----------------------------
[mary@localhost ~]$ cat data.txt
111
AAAAA
333
444
555
111
AAAAA
333
444
555
[mary@localhost ~]$ sh grepab.sh
[mary@localhost ~]$ cat result.txt
111
AAAAA
333
444
111
AAAAA
333
444
[mary@localhost ~]$
※ 編輯: xyz2012 來自: 122.121.215.49 (11/26 23:13)
: ※ 引述《zchien (小建)》之銘言:
: : 不好意思...我使用的是UNIX系統
: : 我想請問一下...
: : 我記得抓關鍵字"AAA"..單行的指令應該是
: : grep "AAA" data.txt > result.txt
: : 會搜尋data.txt內的"AAA"的那行關鍵字...並且存在result.txt
: : 但是我希望能夠取這關鍵字的前一行...和後兩行...(包含AAA的關鍵字那行)
: : 總共需要四行...請問要如何用...
: : 有網友提供過...加入-B1 -A2參數...可以達成...
: : 但是我測試過 grep -B1 -A2 "*AAA*" data.txt > result.txt
: : 但是系統卻顯示無法辨識...-B1 -A2...
: : 而且我測試 man grep 也找不到..(但可能我英文不好..)_
: : 想請各位網友...在提供一下...是否有其他方法...
: : 還是有其他指令可以達成呢 ...謝謝
: 不好意思...重新提我一年前問過的問題
: 因為我目前還沒找到答案
: 我是用SunOS5.10
: 指令好像沒有支援grep -B1 -A2
: 有其他方式嗎
: awk或是sed有辦法達到這功能嗎
grep -B1 -A2 "*AAA*" data.txt > result.txt
參考看看 grepab.sh
----------------------沿虛線剪下-----------------------------
greplinenumbers=`grep -E "*AAA*" -n data.txt | cut -d : -f 1`
rm displaylines.txt > null 2>&1
for getline in $greplinenumbers
do
expr $getline - 1 >> displaylines.txt
expr $getline >> displaylines.txt
expr $getline + 1 >> displaylines.txt
expr $getline + 2 >> displaylines.txt
done
displaylinenumbers=`cat displaylines.txt`
rm result.txt > null 2>&1
for getline in $displaylinenumbers
do
sed -n "$getline p" data.txt >> result.txt
done
----------------------沿虛線剪下-----------------------------
[mary@localhost ~]$ cat data.txt
111
AAAAA
333
444
555
111
AAAAA
333
444
555
[mary@localhost ~]$ sh grepab.sh
[mary@localhost ~]$ cat result.txt
111
AAAAA
333
444
111
AAAAA
333
444
[mary@localhost ~]$
※ 編輯: xyz2012 來自: 122.121.215.49 (11/26 23:13)
Tags:
Linux
All Comments
Related Posts
sarg 佔空間 怎麼辦?

By Kelly
at 2011-11-26T20:38
at 2011-11-26T20:38
SMPlayer 播放時卡住

By Catherine
at 2011-11-26T15:04
at 2011-11-26T15:04
Grep如何抓取前一行後兩行

By Leila
at 2011-11-26T13:39
at 2011-11-26T13:39
centos 5.5 在二代I5電腦 裝不起來

By Oscar
at 2011-11-26T01:39
at 2011-11-26T01:39
哪些二手書店有linux相關書籍(台北)

By Edwina
at 2011-11-25T15:10
at 2011-11-25T15:10