Shell脚本 - 搜索行和显示行以及3个尾随行

时间:2015-12-02 12:02:58

标签: shell awk grep

我正在编写一个搜索查询的脚本,当找到它时会显示该行加上3个尾随行。我找到那条线并显示它没有问题,但是尾随线导致了问题。

在调查之后 - 我没有使用-A -B来跟踪以下行的grep 版本。

_findError()
{
SEARCH=$1
echo $SEARCH

if [ `grep -c "$SEARCH" "$FILE" 2>/dev/null` -gt 0 ]; then
while read LINE
        do
             if [ `echo "$LINE" | grep -c "$SEARCH"` -gt 0 ]; then
                echo "$LINE" >> $FILE
            fi
        done < $FILE        
else
echo "not found"
fi


}

我想知道如何将尾随行写入txt文件?

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

使用GNU和Solaris&#39; SED:

SEARCH="^root"
sed -n '/'"$SEARCH"'/{N;N;N;p;}' /etc/passwd

输出:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh

答案 1 :(得分:0)

gawk的

seq 10 | awk '/6/{a=4}a-->0'
6
7
8
9

答案 2 :(得分:0)

哎呀,你在每一行单独调用grep?别。代替:

awk '/'"$SEARCH"'/{n=NR}NR==n+4{n=0;print ""}n'

另外打印(最多)“之前的两行”,如评论中所述:

awk '/'"$SEARCH"'/{if(!n){print prev2;print prev1}n=NR}
     NR==n+4{n=0;print ""}
     {prev2=prev1;prev1=$0}
     n'