Existe-t-il une commande de coupure 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 comme:
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD.
Comment aborder?
Réponses:
Je suggère:
Production:
FS
contient votre délimiteur "ABCD". "ABCD" est une expression régulière.la source
awk
peut faire le travail si vous fournissez un-F
drapeau avec le mot que vous souhaitez utiliser:Dans votre cas particulier, ce serait:
À en juger par votre exemple, vous essayez uniquement d'imprimer des éléments jusqu'à
ABCD
ce que tout supprimer après cela soit également une option:la source
awk '{print gensub(/(.*ABCD\.).*/,"\\1",1)}'
.sed
version:Source: /unix/257514/how-to-delete-everything-after-a-certain-pattern-or-a-string-in-a-file
la source
grep
Solution:L'expression régulière correspondra à chaque ligne commençant
^
par un caractère.
répété plusieurs fois*
et se terminant par la chaîne.ABCD.
La barre oblique inverse\
échappe à la signification spéciale du point.
à la fin.L'option
-o
indiquera à lagrep
commande d'imprimer uniquement les parties correspondantes (non vides) d'une ligne correspondante.la source
cut
peut lui-même effectuer ce travail. Pas basé sur un mot, mais basé sur un.
délimiteur.Utilisation :
Production
xargs
est utilisé ici uniquement pour ajouter.
à la fin de la chaîneABCD
.la source