J'ai un fichier comme:
171023 03014426 1234 XXXX XXXXXXXX
error code: 123, pc=546, call=0,
171023 03110749 1234 XXXX XXXXXXXX
error code: 123, pc=546, call=0,
Je dois conserver les lignes avec l’horodatage, c’est-à 171023 03014426 1234 XXXX XXXXXXXX
- dire à error code: 123
partir des autres lignes, c’est-à-dire du début de la ligne jusqu’à la virgule, et écrire les modifications dans le même fichier.
Sortie:
171023 03014426 1234 XXXX XXXXXXXX
error code: 123
171023 03110749 1234 XXXX XXXXXXXX
error code: 123
Comment puis je faire ça?
Réponses:
Si j'ai bien compris votre question, vous voulez ceci
devenir ceci:
Il y a plusieurs façons de faire cela, alors choisissez la méthode que vous voulez / aimez / préférez.
sed
Si vous souhaitez apporter des modifications au fichier d'origine
input.txt
, utilisezsed -i
plutôtsed
awk
Cette approche fait en sorte que les virgules soient traitées comme un séparateur de colonnes (dans awk-speak "field"). Nous trouvons donc ici une ligne commençant par
error code
text et remplaçant la ligne d'origine par column$1
, qui dans votre cas est tout ce qui précède virgule, c'est-à-direerror code: 123
.awk
ne peut pas éditer dans le texte (la plupart des versions),sed -i
mais vous pouvez toujours exporter des choses dans un nouveau fichier et remplacer l'ancien fichier par un nouveau comme:pure bash
Essai:
la source
IFS= read
, utiliserIFS=, read -r line extra
peut vous donner la partie avant la virgule gratuitement.cut -d"," -f1
?Si les lignes que vous ne souhaitez pas toucher n'ont pas de virgule et que vous souhaitez toujours uniquement supprimer la première virgule et le reste, vous pouvez utiliser une expression très simple.
s/old/new/
remplacerold
parnew
.*
n'importe quel nombre de caractèresPour éditer le fichier à la place, utilisez
sed
l'option in-situ, qui est-i
. Si un suffixe pour le fichier de sauvegarde est ajouté après-i
, il écrit automatiquement une sauvegarde du fichier d'origine avec cette extension dans le même répertoire, par exempleécrase
file
avec le flux modifié, maisécrit le flux modifié dans
file
et écrit un nouveau fichierfile.orig
avec le contenu original.la source
Vous pouvez utiliser une simple
cut
commande pour faire ce que vous voulez.Écris-le dans le même fichier.
la source