如何从Unix中固定位置的特定字符串中删除文件中的行

时间:2018-09-14 17:02:29

标签: unix

我是脚本编写的新手,但是有这个问题:
 我有一个具有超过10万条记录的文件。 我需要根据特定位置从文件中删除一些记录 就像如果在位置38至45中存在“ AB123”,则应在启动sql加载程序之前从文件中删除该行。

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

您应该使用较小的文件测试解决方案。 我用

制作了一个测试文件
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

<!-- ko if: loadingData -->
 <img src="https://i.giphy.com/media/3oEjI6SIIHBdRxXI40/giphy.webp">
<!-- /ko -->

<button data-bind="click: callServer">Call</button>

每第11行的位置要长一个位置,ABC在这些行的位置10开始。如何只删除这些行?
您从头开始计算(for ((i=0;i<50;i++)); do echo "$((i%11))exampleABC123..$i" ; done > inputfile ,接受9个随机字符(^),后跟应该匹配的字符串,然后删除这些字符(.{9}

/d

当您拥有更多规则时,搜索表达式将变得更加困难。
假设您还想删除以5开头或以9结尾的行。

sed -r '/^.{9}ABC123/d' inputfile

如果您有更多规则,请制作一个配置文件(并添加注释即可),例如sed -r '/^.{9}ABC123|^5|9$/d' inputfile

exclude.sed

现在使用配置中给出的规则来解析输入

/^.{9}ABC123/d # Search for ABC123 on position 10
/^5/d # Lines starting with a 5
/9$/d # Lines finishing with a 9