0 command-line csv text-processing
我有一个网络监控命令的输出,它看起来像这样:
391KB 7.48MB 7.86MB
Run Code Online (Sandbox Code Playgroud)
其中有很多空间先。现在我想用,
.
我试过了sed 's/ /,/g' input_file > output_file
,但结果并不完全符合我的预期:
,,,,,,,,,,,,,,,,,,,,,391KB,,,,,7.48MB,,,,,7.86MB
Run Code Online (Sandbox Code Playgroud)
我什至试过:
sed -r 's/(.*) /\1,/; s/ //g' file.txt > output.txt
Run Code Online (Sandbox Code Playgroud)
但输出如下:
391KB7.48MB,7.86MB
Run Code Online (Sandbox Code Playgroud)
如何用一个逗号替换空格序列?
我认为很高兴提到我想将此数据添加到 csv 文件。
您可以使用 *
(space-space-star) 或 \{1,\}
. 在扩展正则表达式 (ERE) 中,您可以使用 {1,}
或 +
。这些构造的通用名称是Quantifiers。
$ echo ' 391KB 7.48MB 7.86MB' | sed 's/ */,/g'
,391KB,7.48MB,7.86MB
$ echo ' 391KB 7.48MB 7.86MB' | sed -r 's/ +/,/g'
,391KB,7.48MB,7.86MB
Run Code Online (Sandbox Code Playgroud)
GNU sed 允许您在 BRE(以及0 或 1 量词)中使用转义 \+
符\?
- GNU grep 也是如此。
您还可以将tr
, 与-s
( --squeeze-repeats
) 标志一起使用:
$ echo ' 391KB 7.48MB 7.86MB' | tr -s ' ' ,
,391KB,7.48MB,7.86MB
Run Code Online (Sandbox Code Playgroud)
但是,如果您不想要一个空的初始 CSV 字段,请考虑使用 awk - 因为使用默认字段分隔符,它将把连续的空格视为单个分隔符,并忽略前导空格:
$ echo ' 391KB 7.48MB 7.86MB' | awk '{$1=$1} 1' OFS=,
391KB,7.48MB,7.86MB
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
55 次 |
最近记录: |