awk与sed命令实用技巧详解

需积分: 50 0 下载量 76 浏览量 更新于2024-09-17 收藏 178KB PDF 举报
"这篇文档详细介绍了awk和sek命令的使用,包括如何在文本行后添加空行、删除或增加特定模式后的空行、为文件行编号以及进行文本转换和替代等操作。awk和sed是Linux/Unix环境中常用的文本处理工具,它们能够方便地对文本文件进行模式匹配和数据处理。" 在文本处理中,awk和sed是两个非常强大的工具。awk主要用于处理结构化数据,通过模式匹配和动作来处理文本文件。sek(通常应该是sed,可能是输入错误)则是流编辑器,它可以逐行读取输入,对每一行执行指定的命令。 1. **文本间隔**: - `sed G` 在每一行后面添加一个空行。 - `awk '{printf("%s\n\n",$0)}'` 同样的效果,使用awk实现。 - `sed '/^$/d;G'` 删除所有空行并确保每行后有一个空行。 - `awk '!/^$/{printf("%s\n\n",$0)}'` 类似功能,不过仅在非空行后添加空行。 - `sed 'G;G'` 在每一行后面增加两行空行。 - `awk '{f=!f;if(f)print $0}'` 删除所有偶数行,保留奇数行。 2. **插入空行**: - `sed '/regex/{x;p;x;G;}'` 在匹配正则表达式"regex"的行前后各插入一个空行。 - `awk '{if(/regex/)printf("\n%s\n",$0);else print $0}'` 在匹配行后插入一个空行。 - `sed '/regex/{x;p;x;}'` 在匹配行前插入一个空行。 3. **编号**: - `sed 'N;s/\n/\t/'` 为文件中的每一行进行编号,使用制表符对齐。 - `awk '{i++;printf("%d\t%s\n",i,$0)}'` 同样的编号功能,使用awk实现,简单左对齐。 - `sed 'N;s/^//;s/*\(.\{6,\}\)\n/\1/'` 为文件中的所有行编号,右端对齐,至少6位宽度。 - `awk '{i++;if(!/^$/)printf("%d%s\n",i,$0);else print}'` 只显示非空行的编号。 4. **计算行数**: - `sed -n '$='` 计算文件的行数,不打印其他内容。 - `awk '{i++}END{print i}'` 通过awk计算行数,最后打印总行数。 5. **文本转换和替代**: - 转换DOS新行符(CR/LF)为Unix格式:`sed 's/.$/\r/'`,这会把Unix文件中的每个行尾的LF(\n)替换为DOS的CR/LF(\r\n)。 - 其他转换和替代操作可以使用sed的`s`命令进行,例如替换特定字符串,或根据正则表达式进行替换。 这些示例展示了awk和sed的强大功能,它们在日常文本处理任务中非常实用,尤其适合自动化脚本和数据处理场景。通过熟练掌握这两个工具,你可以高效地处理各种文本数据。