我有很多文件看起来像:
2019-10-28-00-00;/dev/xxx;128.00;106.54;/var/x/x/xxx
2019-10-28-06-00;/dev/xxx;128.00;106.54;/var/x/x/xxx
2019-10-28-12-00;/dev/xxx;128.00;106.54;/var/x/x/xxx
2019-10-28-18-00;/dev/xxx;128.00;106.54;/var/x/x/xxx
2019-10-29-00-00;/dev/xxx;128.00;106.54;/var/x/x/xxx
2019-10-29-06-00;/dev/xxx;128.00;106.54;/var/x/x/xxx
2019-10-29-12-00;/dev/xxx;128.00;106.54;/var/x/x/xx
2019-10-29-18-00;/dev/xxx;128.00;21.46;/var/x/x/xxx
2019-10-30-00-00;/dev/xxx;128.00;21.46;/var/x/x/xxx
我想显示我的文件的内容,直到模式"2019-10-29-12-00">
我试过了:
sed -n '/2019-10-29-12-00/,/endif/p' file.txt
但这个命令的作用恰恰相反。
我不知道怎么。。。你知道吗?
使用1,/pattern/p
打印从开始到模式的所有内容。
sed -n '1,/2019-10-29-12-00/p' file.txt
演示
这可能对你有用(GNU sed(:
sed '/2019-10-29-12-00/q' file
这将打印包括2019-10-29-12-00
或在内的每一行
sed '/2019-10-29-12-00/Q' file
这将打印直到但不包括2019-10-29-12-00
的每一行
编辑:根据用户评论。
sed '/2019-10-29-12-00/{:a;n;//ba;Q}' file
找到包含019-10-29-12-00
的行后,打印该行并获取下一行并重复,直到文件结束或不包含019-10-29-12-00
的行。:a
是循环开始的名称,n
命令打印当前行并获取下一行(或者如果是文件结尾,则终止所有sed命令(,//ba
使用最后一个regexp,即/2019-10-29-12-00/
,如果为true,则中断为以下循环名称,即:a
。Q
终止所有sed命令,但不打印当前行。{...}
将sed命令限制为以前的regexp。