Wordに基づいてカットするカットコマンドはありますか?
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.
アプローチ方法
私は提案します:
awk -F 'ABCD' '{print $1 FS "."}' file
出力:
171212 16082784 6264 XXX xxxxxxxxトランザクションXXXXX異常終了ABCD。
FS
には区切り文字「ABCD」が含まれます。 「ABCD」は正規表現です。
awk
は、使用するWordに-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.
sed
バージョン:
sed 's/ABCD.*/ABCD./' input.txt
171212 16082784 6264 XXX xxxxxxxx Transaction XXXXX abend ABCD.
grep
ソリューション:
grep -o '^.*ABCD\.' input.txt
正規表現は、^
を任意の文字.
で繰り返し、*
を繰り返し、ストリングABCD.
で終わる各行に一致します。バックスラッシュ\
はエスケープします末尾のドット.
の特別な意味。
オプション-o
は、一致する行の一致した(空でない)部分のみを印刷するようにgrep
コマンドに指示します。
cut
自体がこのジョブを実行できます。 Wordに基づいているのではなく、.
区切り文字に基づいています。
つかいます :
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
の最後に.
を追加するためにのみ使用されます。