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
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
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 –
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