2017-10-17 43 views
0

我有一个文件,其中包含下面的表单中的数据。如何删除具有匹配模式的整行只存在于列范围75至104

507425B30 171013D248900022 4057-ACCR PROPERTY TAX 
00000000257910+00000000000000+00000000257910+00000000000000+00000000000000+ 
507425B30 171013C249999092 1071-DO NOT USE   
00000000000000+00000000000000+00000000000000+00000000031940+00000000000000+ 

现在我不得不删除包含了像 00000000000000 + 00000000000000 +和棘手的部分图案的线条是我们要删除 只行了,当谈到在第一次发生。将会出现 这样的场景,就像上面的第一条记录,最后一个记录出现,并且 不应该从文件中删除该行。我尝试过使用下面的命令 ,但它在最后发现该模式不应该是这种情况时删除该行。

sed '/00000000000000+00000000000000+/d' file 

我写下面的代码来解决这个问题。但它似乎正在进入无限循环。你能帮我解决问题吗?

while read line 
do 
x=`cat $Line | cut -c 75-104` 
echo $x 

if [ $x -eq "00000000000000+00000000000000+" ] 
then 
sed '/00000000000000+00000000000000+/d' $File > File.dat 
fi 

done < $File 
+0

在正则表达式,我们使用''^表示,我们正在寻找的字符序列存在于行的开头,所以'sed的“/^00000000000000 \ 000000亿\ +/d”文件'应(我也逃过了那些加号,因为那些是正则表达式中的控制字符 – JNevill

+0

它不会删除任何内容,输出文件与运行该命令后的输入文件相同 –

+0

sed输出到stdout如果你想文件本身受到你需要使用'-i'标志进行“编辑”的删除操作:'sed -i'/^00000000000000 \ + 00000000000000 \ +/d'文件' – JNevill

回答

0

这将删除以'14'和'加'字符开头的'file'的每一行两次。

sed -i '/^[0]\{14\}+[0]\{14\}+/d' file 
+0

它仍然没有改变任何东西。我得到的输出与输入相同... –

+0

看看新的编辑解决方案。 – Gonzalo

+0

嗨贡萨洛。它没有工作.... –