我有一个包含以下数据的文件
ABCDEFGHIJKLMNOPQRST
我需要使用命令cut
作为以下
BCD | klm.no | pq.rst
我需要使用剪切功能在输出中包含分隔符|
和.
。
我使用此代码
获得了带有一个分隔符的输出cat file.txt |cut -c2-4,11-13,14-15,16-17,18-20 --output-delimiter='|'
as
BCD | KLM |没有| PQ | RST
我可以通过更改命令中的内容来获得2个输出分隔符吗?
答案 0 :(得分:2)
cut
一次只支持一个分隔符,但您可以使用简单的sed
或Awk脚本轻松替换它。
awk '{ print substr($0, 2, 4) "|" substr($0, 11, 13) "."
substr($0, 14, 15) "|" substr($0, 16, 17) "."
substr($0,18, 20) }' file.txt
巧合的是cat
is useless。
答案 1 :(得分:1)
使用GNU sed:
$ sed -r 's/.(.{3}).{6}(.{3})(.{2})(.{2})/\1|\2.\3|\4./' file.txt
bcd|klm.no|pq.rst
答案 2 :(得分:1)
两个cut
(由 Gilez 建议&OP评论给OP):
cut -c2-4,11-15,16-20 --output-delimiter='|' file.txt | \
cut -c1-7,8-13,14-15 --output-delimiter='.'
输出:
bcd|klm.no|pqr.st
如果有这样的定期输入,tr
也可以回答"这没有管道:
tr -s 'a-t' 'b-d|k-m.no|p-r.st' < file.txt
注意:tr
无法插入,因此听起来不可能。通常 是不可能的,但作弊是在 SET2 中包含答案,并挤出其余部分。