Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex grep并显示两个引用中的所有行_Regex_Unix_Grep - Fatal编程技术网

Regex grep并显示两个引用中的所有行

Regex grep并显示两个引用中的所有行,regex,unix,grep,Regex,Unix,Grep,我有一个这样的数据文件-- 这里M!=N 我正在尝试转储只属于#流0-- 但问题是我既不知道N的长度也不知道M的长度 我需要一些命令来显示匹配后的所有数据(#stream 0),直到它到达下一个字符串#stream 我能和格雷普一起做吗?我该怎么做 使用awk,它有以下功能,语法简单: awk '/# stream 0/,/# stream 1/' data.txt 请注意,我避免无用地使用cat:-) /startpattern/,/endpattern/语法对开始模式和结束模式之间的每一

我有一个这样的数据文件--

这里M!=N

我正在尝试转储只属于
#流0
--

但问题是我既不知道N的长度也不知道M的长度

我需要一些命令来显示匹配后的所有数据(
#stream 0
),直到它到达下一个字符串
#stream


我能和格雷普一起做吗?我该怎么做

使用awk,它有以下功能,语法简单:

 awk '/# stream 0/,/# stream 1/' data.txt
请注意,我避免无用地使用
cat
:-)


/startpattern/,/endpattern/
语法对开始模式和结束模式之间的每一行计算为true。默认操作是打印行,因此不需要明确地告诉awk这样做。

awk
可以很容易地做到这一点

awk '/# stream 0/,/# stream 1/' input
将打印两个图案之间的所有线条匹配

# stream 0
....
....
.... N lines of data
# stream 1
如果要使用
grep
,则可以删除换行符并
grep
结果

cat input | tr -d '\n' | grep -o '# stream 0.*# stream 1'

如果删除了所有换行符,它将产生混乱的输出

如果您确实坚持使用
grep
,您可以这样做:

grep -A 999999 "stream 0" file | grep -B 999999 "stream 1"
您也可以使用
sed
执行此操作:

sed -ne '/stream 0/,/stream 1/p' file
grep -A 999999 "stream 0" file | grep -B 999999 "stream 1"
sed -ne '/stream 0/,/stream 1/p' file