sed匹配文本文件中的特定列?

时间:2016-11-07 13:25:21

标签: bash text awk sed

我必须将打印报告中的一些数据导入到可用于迁移到另一个系统的表单中。我似乎被困在一个小模式上:我试图删除任何具有字符串.00的行,从报告中的第128列开始,以及下一行。

我正在使用以下内容:sed '/^\{128\}\.00/,+1 d'inputfile >outputfile

我正在使用FreeBSD,我收到了RE错误:repeatition-operator操作数无效。如果我通过删除+1以删除以下行进行实验,我会得到同样的错误,所以我想我错过了更基本的东西。

(我确信有人会跳进去说“你应该使用awk,就像这样......”但我有特别的理由试图用sed做这件事。不幸的是,已经有30多年了因为我是一个sed / awk巫师,而且我对他们两个都很生气.8-))

感谢您的帮助。

这是我想要匹配的文本的两行示例:

1011-000                                       .00                  .00                .00                .00                  .00
Petty Cash-Shop

请注意,尽管这里有换行,但最后一列是.00。我从vim的实验中得到了列号。我希望一旦执行sed命令,这两行都会消失。

我将命令更改为sed '/\.\{128\}\.00/,+1 d'inputfile >outputfile并且它们不会消失。 (但是感谢你抓住那个需要的“。”。我不再得到RE错误了。)

1 个答案:

答案 0 :(得分:0)

试试这个:

sed '/^.\{127\}\.00/{N;d;}' inputfile > outputfile

如果第127个字符后面的下一个字符串是.00,则使用N命令将下一行添加到模式空间,并使用d删除它。