2017-10-17 45 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

嗨貢薩洛。它沒有工作.... –