1

我想分隔冒号后的所有内容:前后两个单独的值。

Server Id: 9
Completed: 0
In Error: 0
Added To Queue: 0
Waiting: 0
In Progress: 0
Total Processed: 0
Processing Rate: 0
FinalStatus:0, GOOD

预期视图:

Server Id|9
Completed|0
...

我可以得到一行的最后一列:

grep -oP '(?<=:)\w+'

并且想知道如何分离这些值。

4

5 回答 5

2

简单的 awk 命令将为您提供输出:

awk -F ":" '{sub(/^ +/, "", $2); print $1"|"$2}' file

但不得不说你的问题很模糊,不清楚这是否真的是你需要的。

于 2013-07-02T11:35:05.443 回答
1

在 GNU sed 中,

sed 's/ *: */|/g' file
于 2013-07-02T12:43:13.193 回答
1

如果您只想用管道字符替换冒号分隔符,那么这个单行 Perl 程序会按照您的要求执行

perl -ne "print join '|', split /:\s*/" myfile

输出

Server Id|9
Completed|0
In Error|0
Added To Queue|0
Waiting|0
In Progress|0
Total Processed|0
Processing Rate|0
FinalStatus|0, GOOD
于 2013-07-02T11:41:41.560 回答
1

我想使用正则表达式再添加一个选项

perl -ne '$_ =~ s/:\s?/|/; print $_' myfile

输出:

Server Id|9
Completed|0
In Error|0
Added To Queue|0
Waiting|0
In Progress|0
Total Processed|0
Processing Rate|0
FinalStatus|0, GOOD
于 2013-07-02T11:57:07.100 回答
1

如果任务真的像您建议的那样简单,那么这是一个非常简单的答案:

tr ":" "|"  < file.txt

或在一个perl版本中;-)

perl -pe 'tr{:}{|}' file.txt
于 2013-07-02T16:02:24.207 回答