我是脚本的新手,我有这个问题: 我有一个文件超过100k +记录。我需要根据某些特定位置从我的文件中删除一些记录,如果'AB123'出现在38到45位,那么该行应该在启动sql loader之前从文件中删除。
任何人都可以帮助我。
您应该使用较小的文件测试解决方案。我做了一个测试文件
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