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 -iplutô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 codetext 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.
awkne peut pas éditer dans le texte (la plupart des versions), sed -imais 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