是否有任何剪切命令可以根据单词进行剪切,例如:
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.
答案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
。