我有一个文件,其中包含下面的表单中的数据。如何删除具有匹配模式的整行只存在于列范围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
在正则表达式,我们使用''^表示,我们正在寻找的字符序列存在于行的开头,所以'sed的“/^00000000000000 \ 000000亿\ +/d”文件'应(我也逃过了那些加号,因为那些是正则表达式中的控制字符 – JNevill
它不会删除任何内容,输出文件与运行该命令后的输入文件相同 –
sed输出到stdout如果你想文件本身受到你需要使用'-i'标志进行“编辑”的删除操作:'sed -i'/^00000000000000 \ + 00000000000000 \ +/d'文件' – JNevill