awk 实现《SED单行脚本快速参考》

需积分: 9 3 下载量 148 浏览量 更新于2024-08-01 收藏 27KB DOCX 举报
"《SED 单行脚本快速参考》" 在Linux系统中,`sed`和`awk`是两种非常强大的流编辑器,它们在处理文本数据时各有优势。`sed`通常以其简洁的命令行语法而闻名,尽管这可能导致脚本可读性较低。相比之下,`awk`提供了更接近编程语言的结构,如`if`和`while`语句,使得逻辑处理更为直观。 1. **在每一行后面增加一空行** - `sed G` - `awk '{printf("%s\n\n",$0)}'` 2. **删除所有空行并添加一空行** - `sed '/^$/d;G'` - `awk '!/^$/{printf("%s\n\n",$0)}'` 3. **在每一行后面增加两行空行** - `sed 'G;G'` - `awk '{printf("%s\n\n\n",$0)}'` 4. **删除所有偶数行(即删除所有空行)** - `sed 'n;d'` - `awk '{f=!f;if(f)print $0}'` 5. **在匹配"regex"的行前插入空行** - `sed '/regex/{x;p;x;}'` - `awk '{if(/regex/)printf("\n%s\n",$0);else print $0}'` 6. **在匹配"regex"的行后插入空行** - `sed '/regex/G'` - `awk '{if(/regex/)printf("%s\n\n",$0);else print $0}'` 7. **在匹配"regex"的行前后各插入空行** - `sed '/regex/{x;p;x;G;}'` - `awk '{if(/regex/)printf("\n%s\n\n",$0);else print $0}'` 8. **为文件中的每一行编号(左对齐)** - `sed =filename | sed 'N;s/\n/\t/'` - `awk '{i++;printf("%d\t%s\n",i,$0)}'` 9. **对文件中的所有行编号(左对齐,文字右端对齐)** - `sed =filename | sed 'N;s/^//;s/*\(.\{6,\}\)\n/\1/'` - `awk '{i++;printf("%6d%s\n",i,$0)}'` 10. **仅显示非空行的行号** - `sed '/./='` 这些示例展示了`sed`和`awk`在文本处理中的基本操作,如行操作、模式匹配和行编号。在实际应用中,根据具体需求,开发者可以选择更适合的工具或结合两者以实现复杂的数据处理任务。虽然`sed`的命令可能较短,但其语法可能更难以理解,而`awk`则提供了更丰富的控制结构,对于需要编写复杂逻辑的脚本,`awk`可能更为合适。最终选择哪种工具,取决于个人喜好和任务的复杂程度。