sed 空行怎么匹配
时间: 2024-10-09 15:12:09 浏览: 12
在 `sed` 中,空行通常需要特殊处理,因为它们不会像文本字符那样直接匹配。你可以使用正则表达式来识别空行。以下是几种匹配空行的方式:
1. **匹配空白行** (包括空格、制表符和换行): 可以用 `/^\s*$/` 匹配,这里 `\s*` 表示任意数量的空白字符。
```bash
sed -n '/^\s*$/p' input.txt
```
2. **匹配仅包含换行符的行**: 使用 `/^\n*$/`,只匹配由零个或多个换行符组成的行。
```bash
sed -n '/^\n*$/p' input.txt
```
3. **匹配连续的空行**: 如果你想查找连续的空行,可以稍微复杂一些,例如上面提到的连续三行以上的空行替换例子:
```bash
sed -e '/^$/{:a;N;$!ba; /^\(\n\{3\}\)\n/!P;D}' input.txt
```
4. **匹配特定数量的空行**: 如果你需要精确匹配一定数量的空行,可以用 `$n` 来指定,比如匹配2行空行:
```bash
sed '/^\n\n$/!d' input.txt
```
这里的 `!d` 表示如果行不是两行连续的空行,则跳过该行,不打印出来。
相关问题
sed命令过滤掉配置文件所有空行
你可以使用以下命令在 Unix/Linux 系统中使用 sed 命令过滤掉所有空行:
```
sed -i '/^$/d' /path/to/config/file
```
该命令使用 sed 命令中的正则表达式(/^$/)匹配所有空行,并使用删除命令(d)删除它们。选项 -i 用于直接修改文件,而不是将输出发送到标准输出。将 /path/to/config/file 替换为你的配置文件的实际路径。
在含有adm的行下方插入一行空行(sed/awk两种方法做)
在Unix/Linux系统中,你可以使用`sed`或`awk`命令来在含有特定字符串"adm"的行下方插入一行空行。以下是两种方法的示例:
**使用sed方法:**
```bash
sed '/adm/{n; p;}' input.txt > output.txt
```
这里,`/adm/`是正则表达式匹配条件,找到包含"adm"的行。`n`是在当前行之后移动到下一行,`p`打印当前行(即包含"adm"的那一行)。由于我们直接替换输入文件,所以结果不会覆盖原文件,可以用`>`将输出重定向到新的文件output.txt。
**使用awk方法:**
```bash
awk '/adm/ {getline; print ""; print $0}' input.txt > output.txt
```
在这个awk脚本中,当找到包含"adm"的行时,`getline`命令读取并跳过下一行。然后打印一个空行(`print ""`),最后再次打印当前行($0)。结果同样保存到output.txt。
**相关问题--:**
1. 这两种方法的区别是什么?
2. 如果我不想修改原文件,而是直接在原文件后添加空行呢?
3. 如果我想在所有含有"adm"的行后都插入空行,而不是仅限于紧接其后的那行,该怎么办?