Existe-t-il une commande de coupe à couper basée sur un mot, par exemple:
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD. The task has terminated abnormally because of a program check. 16:08:27
Je veux la sortie en tant que:
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD.
Comment aborder?
Je suggère:
awk -F 'ABCD' '{print $1 FS "."}' file
Sortie:
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX avec ABCD.
FS
contient votre délimiteur "ABCD". "ABCD" est une regex.
awk
peut faire le travail si vous fournissez -F
avec le mot que vous souhaitez utiliser:
$ awk -F 'test' '{print $1;print $2}' <<< "onetesttwotest"
one
two
Dans votre cas particulier, ce serait:
$ awk -F 'ABCD' '{print $1,FS}' input.txt
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD
À en juger par votre exemple, vous essayez uniquement d’imprimer des éléments jusqu’à ABCD
. Vous pouvez donc tout supprimer par la suite:
$ awk '{print substr($0,0,match($0,/ABCD/)+4);}' input.txt
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD.
sed
version:
sed 's/ABCD.*/ABCD./' input.txt
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD.
grep
solution:
grep -o '^.*ABCD\.' input.txt
L'expression régulière correspond à chaque ligne commençant par ^
par un caractère .
répété plusieurs fois par *
et se terminant par la chaîne ABCD.
La barre oblique inverse \
échappe à la signification particulière du point .
à la fin.
L'option -o
indiquera à la commande grep
de n'imprimer que les parties correspondantes (non vides) d'une ligne correspondante.
cut
peut lui-même effectuer ce travail. Pas basé sur un mot, mais basé sur le délimiteur .
.
Utilisation :
cut -f 1 -d '.' input.txt | xargs -I "%" echo %.
sortie
rooney@bond-pc:~$ cat input.txt
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD. The task has terminated abnormally because of a program check. 16:08:27
rooney@bond-pc:~$
rooney@bond-pc:~$ cut -f 1 -d '.' input.txt | xargs -I "%" echo %.
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD.
xargs
est utilisé ici uniquement pour ajouter .
à la fin de la chaîne ABCD
.