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

问题描述 投票:0回答:1

我是脚本的新手,我有这个问题: 我有一个文件超过100k +记录。我需要根据某些特定位置从我的文件中删除一些记录,如果'AB123'出现在38到45位,那么该行应该在启动sql loader之前从文件中删除。

任何人都可以帮助我。

unix
1个回答
0
投票

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

for ((i=0;i<50;i++)); do echo "$((i%11))exampleABC123..$i" ; done > inputfile

每隔11行更长一个位置,ABC在这些行的第10位开始。如何只删除这些行? 你从头开始计数(^),接受9个随机字符(.{9}),然后是应该匹配的字符串,并删除这些(/d

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

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

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

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

sed -rf exclude.sed inputfile
© www.soinside.com 2019 - 2024. All rights reserved.