以单词作为分隔符的剪切命令

以单词作为分隔符的剪切命令

是否有任何剪切命令可以根据单词进行剪切,例如:

171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD. The task has terminated abnormally because of a program check. 16:08:27

我想要的输出为:

171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

如何处理?

答案1

我建议:

awk -F 'ABCD' '{print $1 FS "."}' file

输出:

171212 16082784 6264 XXX xxxxxxxx 交易 XXXXX 异常结束 ABCD。

FS包含分隔符“ABCD”。“ABCD”是一个正则表达式。

答案2

sed版本:

sed 's/ABCD.*/ABCD./' input.txt
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

来源:https://unix.stackexchange.com/questions/257514/how-to-delete-everything-after-a-certain-pattern-or-a-string-in-a-file

答案3

awk-F如果您在标志中提供想要使用的单词,则可以完成该工作:

$ awk -F 'test'  '{print $1;print $2}'  <<<  "onetesttwotest"                                                            
one
two

就您的具体情况而言,情况是:

$ awk -F 'ABCD' '{print $1,FS}' input.txt                                                                                
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend  ABCD

从您的例子来看,您只是试图打印内容,ABCD因此删除之后的所有内容也是一个选择:

$ awk '{print substr($0,0,match($0,/ABCD/)+4);}' input.txt                                                               
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

答案4

cut可以自己完成这项工作。不是基于单词,而是基于.分隔符。

使用 :

cut -f 1 -d '.' input.txt | xargs -I "%" echo %.

输出

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在这里仅用于附加到.字符串的末尾ABCD

相关内容