2017-10-17 9 views
0

J'ai un fichier qui contient des données dans le formulaire ci-dessous.Comment faire pour supprimer la ligne entière avec un motif correspondant existe uniquement dans la plage de colonnes 75 à 104

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

Maintenant, je dois supprimer les lignes qui contient le motif comme 00000000000000 + 00000000000000 + et la partie la plus délicate est que nous devons supprimer la ligne seulement quand il est dans la 1ère occurrence. Il y aura des scénarios comme le premier enregistrement dans le ci-dessus où le modèle est arrivé au dernier et il ne devrait pas supprimer la ligne du fichier. J'ai essayé d'utiliser la commande ci-dessous mais il supprime la ligne quand il trouve ce modèle dans le dernier ne devrait pas être le cas.

sed '/00000000000000+00000000000000+/d' file 

J'ai écrit le code ci-dessous pour résoudre ce problème. Mais il semble que ça va à la boucle infinie. Pouvez-vous aider où je vais mal?

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

En regex nous utilisons le '^' pour indiquer que la séquence de caractères que nous recherchons existe au début de la ligne, de sorte que le fichier 'sed «/^ 00000000000000 \ 00000000000000 \ +/d »' devrait faire le tour (j'ai aussi échappé à ces signes plus car ce sont des caractères de contrôle dans regex – JNevill

+0

Il ne supprime rien, le fichier de sortie est le même que le fichier d'entrée après l'exécution de cette commande –

+0

sed sorties vers stdout. fichier lui-même pour être soumis aux suppressions dont vous avez besoin d'utiliser le drapeau '-i' pour" Modifier sur place ":' sed -i '/^00000000000000 \ +00000000000000 \ +/d' fichier' – JNevill

Répondre

0

Cela supprimera chaque ligne de 'fichier' qui commence par 14 zéros et un caractère plus deux fois.

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

Ça ne change toujours rien. J'obtiens la même sortie que l'entrée ... –

+0

Jetez un oeil à la nouvelle solution éditée. – Gonzalo

+0

Salut Gonzalo. Cela n'a pas fonctionné ... –