我有一个如下文件
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'
答案 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