Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在shell脚本中,我可以在cut中指定多个输出分隔符吗?_Bash_Shell_Command_Sh - Fatal编程技术网

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

Bash 在shell脚本中,我可以在cut中指定多个输出分隔符吗?,bash,shell,command,sh,Bash,Shell,Command,Sh,我有一个包含以下数据的文件 abcdefghijklmnopqrst 我需要一个使用命令cut的输出,如下所示 bcd |荷航编号| pq.rst 我需要使用cut在输出中包括分隔符|和 我得到了一个使用此代码的分隔符的输出 cat file.txt |cut -c2-4,11-13,14-15,16-17,18-20 --output-delimiter='|' 作为 荷航bcd号pq rst 我可以通过更改命令中的某些内容来获得两个输出分隔符吗?cut一次只支持一个分隔符,但您可以轻松地用

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

abcdefghijklmnopqrst

我需要一个使用命令
cut
的输出,如下所示

bcd |荷航编号| pq.rst

我需要使用cut在输出中包括分隔符
|

我得到了一个使用此代码的分隔符的输出

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

荷航bcd号pq rst


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

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

巧合的是,

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
巧合的是,GNU使用的。

$ sed -r 's/.(.{3}).{6}(.{3})(.{2})(.{2})/\1|\2.\3|\4./' file.txt
bcd|klm.no|pq.rst
使用GNU时:

$ sed -r 's/.(.{3}).{6}(.{3})(.{2})(.{2})/\1|\2.\3|\4./' file.txt
bcd|klm.no|pq.rst
两个
cut
s(由Gilez对OP的评论建议):

输出:

bcd|klm.no|pqr.st

有了这样的常规输入,
tr
也可以在没有管道的情况下“回答”这个问题:

tr -s 'a-t' 'b-d|k-m.no|p-r.st' < file.txt
tr-s'a-t''b-d | k-m.no | p-r.st'
注意:
tr
无法插入,因此听起来不可能。一般来说,这是不可能的,但欺骗是将答案包含在SET2中,然后挤出其余的

2个
cut
s(由Gilez对OP的评论建议):

输出:

bcd|klm.no|pqr.st

有了这样的常规输入,
tr
也可以在没有管道的情况下“回答”这个问题:

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

注意:
tr
无法插入,因此听起来不可能。一般来说,这是不可能的,但欺骗是将答案包含在SET2中,然后挤出其余的

你不能把它运行两次吗?一次用于第一个分隔符,一次用于第二个分隔符?@gilez是的,你可以。你不能在
cut
中运行两次吗?第一个分离器一次,第二个分离器一次?@gilez是的,你可以。