在shell 脚本中,我可以在cut 中指定多个输出分隔符吗?

In shell script, can I specify more than one output delimiter in cut?

我有一个包含以下数据的文件

abcdefghijklmnopqrst

我需要使用命令 cut 的输出如下

bcd|klm.no|pq.rst

我需要使用 cut 在我的输出中包含分隔符 |.

我使用这段代码得到了带有一个定界符的输出

cat file.txt |cut -c2-4,11-13,14-15,16-17,18-20 --output-delimiter='|'

作为

bcd|klm|no|pq|rst

我可以通过更改命令中的某些内容来获得 2 个输出分隔符吗?

cut 一次支持单个分隔符,但您可以使用简单的 sed 或 Awk 脚本轻松替换它。

awk '{ print substr([=10=], 2, 4) "|" substr([=10=], 11, 13) "."
   substr([=10=], 14, 15) "|" substr([=10=], 16, 17) "."
    substr([=10=],18, 20) }' file.txt

巧合的是cat is useless.

使用 GNU sed:

$ sed -r 's/.(.{3}).{6}(.{3})(.{2})(.{2})/|.|./' file.txt
bcd|klm.no|pq.rst

两个 cut(由 Gilez 对 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 也可以 "answer" 没有管道:

tr -s 'a-t' 'b-d|k-m.no|p-r.st' < file.txt

注:tr不能插入,听起来不可能。一般是不可能的,但是作弊就是把答案包含在SET2里,把答案挤出来休息。