【问题标题】:Output each match from sed as a separate file将 sed 中的每个匹配项作为单独的文件输出
【发布时间】:2016-06-03 07:44:34
【问题描述】:

我有一个包含多项选择答案的问题的文件。

每个问题的第一行以010 开头。 每个问题的最后一行以小写e开头。

我需要将每个匹配项输出到一个单独的文件中。

sed -n '/010/,/e)/p' FileName

上面的 sed 命令显示了我需要的信息。我怎样才能将每个匹配输出到它自己的文件中?第一个文件应命名为1,并为下一个匹配增加1。

【问题讨论】:

  • 您已经知道如何获取您需要的数据,因此将其通过管道传输到 csplit 实用程序中以将其分解为单独的文件。

标签: regex bash sed


【解决方案1】:

sed 不能这样做,但 awk 可以。

awk -v RS="010" 'NR > 1 {print RS $0 > (NR-1)}' filename

RS 定义了记录分隔符(通常是换行符),NR 是当前记录号。我添加了NR>1 条件,因为文件以记录分隔符开头,所以第一条记录将是它之前的空字符串。

【讨论】:

  • > 是重定向运算符:该行将附加到> 右侧命名的文件名,如果文件不存在则将创建该文件。我使用NR-1 的值作为文件名。
  • 非常感谢,我不知道在 awk 中除了 expr eval 之外还使用了 >。你打开了我的眼睛。
猜你喜欢
  • 1970-01-01
  • 2020-06-22
  • 2013-10-01
  • 1970-01-01
  • 2018-05-01
  • 2015-05-16
  • 2012-08-27
  • 2019-03-04
  • 1970-01-01
相关资源
最近更新 更多