grep 正则匹配两个单词中间多行内容
时间: 2023-07-11 08:53:02 浏览: 243
可以使用 `grep` 命令配合正则表达式来匹配两个单词中间的多行内容。具体的命令如下:
```
grep -Pzo 'word1\n([\s\S]*?)\nword2' file.txt
```
其中,`word1`和`word2`是你需要匹配的两个单词,`file.txt`是你需要在其中查找的文件名。`-P`参数表示使用 `perl` 正则表达式,`-z`参数表示使用 NULL 字符作为行分隔符,`-o`参数表示只输出匹配到的内容,而不是整行输出。`[\s\S]*?` 表示匹配任意字符,出现0次或多次,采用非贪婪模式,以便尽可能匹配到最短的内容。`[\s\S]` 表示匹配任意字符,包括空格和换行符。
这个命令会输出两个单词中间的多行内容,包括换行符和空格。如果需要去掉空格和换行符,可以在命令末尾加上 `| tr -d '\n' | tr -d ' '`。
```
grep -Pzo 'word1\n([\s\S]*?)\nword2' file.txt | tr -d '\n' | tr -d ' '
```
这样输出的内容就没有空格和换行符了。
相关问题
grep 匹配两个单词中间多行内容
如果需要匹配两个单词中间的多行内容,可以使用 `grep` 命令配合 `perl` 正则表达式来实现。具体的命令如下:
```
grep -Pzo 'word1\n((?s).*?)\nword2' file.txt
```
其中,`word1`和`word2`是你需要匹配的两个单词,`file.txt`是你需要在其中查找的文件名。`-P`参数表示使用 `perl` 正则表达式,`-z`参数表示使用 NULL 字符作为行分隔符,`-o`参数表示只输出匹配到的内容,而不是整行输出。`(?s)`表示开启 `dotall` 模式,即 `.` 可以匹配任意字符,包括换行符。`.*?` 表示匹配任意字符,出现0次或多次,采用非贪婪模式,以便尽可能匹配到最短的内容。
这个命令会输出两个单词中间的多行内容,包括换行符和空格。如果需要去掉空格和换行符,可以在命令末尾加上 `| tr -d '\n' | tr -d ' '`。
```
grep -Pzo 'word1\n((?s).*?)\nword2' file.txt | tr -d '\n' | tr -d ' '
```
这样输出的内容就没有空格和换行符了。
阅读全文