我正在编写一个搜索查询的脚本,当找到它时会显示该行加上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文件?
感谢您的帮助。
答案 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'