sed搜索范围并打印第一组

时间:2014-03-09 03:01:10

标签: linux shell sed awk

我有一个如下文件

myname
_       something
_       something
_       something
myname
_       something
_       something
myname
_       something
and it follows and no standard other than myname word.

现在我要打印从myname到myname的第一组搜索,如下所示。

myname
_       something
_       something
_

我尝试使用以下内容但它无效。

sed -n -e '/myname/,/myname/ p' file

打印所有套装。

尝试了这一点,但没有奏效。

sed -n '/myname/,$ p;/myname/q'

4 个答案:

答案 0 :(得分:3)

以下是awk的另一种方式:

awk '/myname/{++c}c<2' file

$ cat file
myname
_       something
_       something
_       something
myname
_       something
_       something
myname
_       something

$ awk '/myname/{++c}c<2' file
myname
_       something
_       something
_       something

如果你的档案太大,那么:

awk '/myname/{++c}c==2{exit}1' file

答案 1 :(得分:2)

awk  '/myname/{if(b) exit; else b=1}1' filename



$ cat temp.txt
myname
_       something
_       something
_       something
myname
_       something
_       something
myname
_       something

$ awk  '/myname/{if(b) exit; else b=1}1' temp.txt
myname
_       something
_       something
_       something

答案 2 :(得分:1)

这可能适合你(GNU sed):

sed '/myname/{:a;n;//Q;$!ba}' file

查找模式myname然后设置一个循环,打印当前行,如果新的当前行包含上述模式或循环,则退出(但不打印)。

另一种方法,使用类似grep的选项-n

sed -n '/myname/{:a;p;n;//q;ba}' file

答案 3 :(得分:0)

这是一个Bash解决方案。

n=0
while read line; do
    [[ $line == myname ]] && ((n++))
    [ $n -gt 1 ] && break
    echo $line
done < file