Si j'ai bien compris votre question, vous voulez ceci
171023 03014426 1234 XXXX XXXXXXXX
error code: 123, pc=546, call=0,
171023 03110749 1234 XXXX XXXXXXXX
error code: 123, pc=546, call=0,
devenir ceci:
171023 03014426 1234 XXXX XXXXXXXX
error code: 123
171023 03110749 1234 XXXX XXXXXXXX
error code: 123
Il y a plusieurs façons de faire cela, alors choisissez la méthode que vous voulez / aimez / préférez.
sed
$ sed 's/\(error code:[[:blank:]][[:digit:]]*\),.*/\1/' input.txt
171023 03014426 1234 XXXX XXXXXXXX
error code: 123
171023 03110749 1234 XXXX XXXXXXXX
error code: 123
Si vous souhaitez apporter des modifications au fichier d'origine input.txt
, utilisez sed -i
plutôtsed
awk
$ awk -F ',' '/^error code/{$0=$1};1' input.txt
171023 03014426 1234 XXXX XXXXXXXX
error code: 123
171023 03110749 1234 XXXX XXXXXXXX
error code: 123
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-à-dire error 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:
awk -F ',' '/^error code/{$0=$1};1' input.txt > new_data.txt && mv new_data.txt input.txt
pure bash
#!/usr/bin/env bash
# make temp file for writing stuff
temp=$(mktemp)
# read input file, make necessary changes, write to temp file
while IFS= read -r line;
do
case $line in
"error code:"*) printf "%s\n" "${line%%,*}" >> "$temp";;
*) printf "%s\n" "$line" >> "$temp";;
esac
done < "$1"
mv "$temp" "$1"
Essai:
$ # before
$ cat input.txt
171023 03014426 1234 XXXX XXXXXXXX
error code: 123, pc=546, call=0,
171023 03110749 1234 XXXX XXXXXXXX
error code: 123, pc=546, call=0,
$ # after
$ ./edit_error_codes.sh input.txt
$ cat input.txt
171023 03014426 1234 XXXX XXXXXXXX
error code: 123
171023 03110749 1234 XXXX XXXXXXXX
error code: 123