我想要将一个文件分割成几个部分。sed
可以用来实现这个功能,例如:
sed -e '0,/expr/d' filename
如果我想在“expr”后分割文件的底半部分,可以使用该命令。但是如果有多个出现次数,并且我想在第n次出现后分割怎么办?我已经找到了解决方案,例如如果我想在第二次出现后进行分割,则:
sed -e '0,/expr/! {/expr/,$d}' filename
将文件中从开头到第二个"expr"出现的位置上半部分提取出来。感叹号(!)告诉它忽略第一个范围,只将大括号中的命令应用于文件的其他部分。
但是对于更一般的情况呢?例如,从倒数第二次出现位置开始。
我一直在使用sed
,但我认为awk
也会有优雅的解决方案。
-vn=$n
语法适用于我尝试过的所有awk版本,包括我认为OS X使用的BSD awk。 - riciawk version 20070501
(OS X 10.9)-很奇怪,但这就是awk --version
报告的。 - mklement0bash 3.2.51
)- 至少部分原因我认为是政治问题(许可问题)。感谢更新。 - mklement0