sed 匹配两个单词之间多行内容
时间: 2023-07-18 08:48:10 浏览: 63
可以使用 `sed` 命令来匹配两个单词之间的多行内容,具体的命令如下:
```
sed -n '/word1/,/word2/{/word1/b;/word2/b;p}' file.txt
```
其中,`word1`和`word2`是你需要匹配的两个单词,`file.txt`是你需要在其中查找的文件名。`-n`参数表示只输出匹配到的内容,而不是整行输出。`/word1/,/word2/`表示匹配两个单词之间的所有行。`/word1/b`表示如果匹配到 `word1`,则跳过当前行,开始处理下一行。`/word2/b`表示如果匹配到 `word2`,则跳过当前行,开始处理下一行。`p`表示打印匹配到的行。
这个命令会输出两个单词之间的多行内容,包括换行符和空格。如果需要去掉空格和换行符,可以在命令末尾加上 `| tr -d '\n' | tr -d ' '`。
```
sed -n '/word1/,/word2/{/word1/b;/word2/b;p}' file.txt | tr -d '\n' | tr -d ' '
```
这样输出的内容就没有空格和换行符了。
相关问题
sed 匹配两个单词中间的多行数据
在sed中,可以使用模式匹配和行匹配来匹配两个单词之间的多行数据,具体步骤如下:
1. 使用模式匹配来匹配第一个单词及其后面的所有内容。例如,假设第一个单词是"start",可以使用以下sed命令来匹配:
```
sed -n '/start/,/pattern/p' input.txt
```
其中,`-n`参数表示只输出匹配的行,`/start/`表示匹配第一个单词,`/pattern/`表示匹配第二个单词(这里假设第二个单词是"pattern"),`p`表示打印匹配的行。
2. 使用行匹配来匹配两个单词之间的所有行。例如,假设第一个单词在第1行,第二个单词在第5行,可以使用以下sed命令来匹配:
```
sed -n '1,5p' input.txt
```
其中,`-n`参数表示只输出匹配的行,`1,5p`表示打印第1行到第5行的内容。
综合上述步骤,可以使用以下sed命令来匹配两个单词之间的多行数据:
```
sed -n '/start/,/pattern/p' input.txt | sed -n '1,5p'
```
其中,第一条命令匹配第一个单词和第二个单词之间的所有内容,第二条命令匹配第一个单词和第二个单词之间的所有行。
sed删除文件中匹配的多行字段
使用sed命令删除文件中匹配的多行字段,可以使用以下命令:
```bash
sed '/pattern1/,/pattern2/d' filename
```
其中,`pattern1`和`pattern2`是需要删除的字段所匹配的模式。这个命令将会删除从`pattern1`匹配到`pattern2`匹配之间的所有行。
如果要直接在原文件中进行修改,则可以使用以下命令:
```bash
sed -i '/pattern1/,/pattern2/d' filename
```
其中,`-i`选项表示直接修改原文件。
举个例子,假设我们有一个名为`example.txt`的文件,内容如下:
```
line 1
line 2 to be deleted
line 3 to be deleted
line 4
```
如果我们想要删除`line 2`和`line 3`这两行,可以使用以下命令:
```bash
sed '/to be deleted/,/to be deleted/d' example.txt
```
输出结果如下:
```
line 1
line 4
```
如果要直接修改原文件,则可以使用以下命令:
```bash
sed -i '/to be deleted/,/to be deleted/d' example.txt
```
此时,`example.txt`的内容被修改为:
```
line 1
line 4
```