使用命令行用一个逗号替换连续的空格

时间:2015-08-21 07:54:15

标签: linux string awk

想知道用一个逗号替换一个或多个连续空格的最有效解决方案?单个命令是首选。 :)

我正在使用Mac OS / Linux。

提前谢谢, 林

4 个答案:

答案 0 :(得分:2)

试试这个单行,这不会取代BOL或EOL的空格

awk -v OFS="," '{$1=$1}7' file

此行将替换所有空格:

awk '1+gsub(/ +/,",")' file

另一个用sed,这将替换所有空格,包括前导和结尾

sed 's/ \+/,/g' file

答案 1 :(得分:2)

这是tr开箱即用的

tr -s ' ' ','

答案 2 :(得分:1)

使用sed:

sed 's/  */,/g'

举个例子:

$ echo 'a b  c   d' | sed 's/  */,/g'
a,b,c,d

答案 3 :(得分:0)

注意到关于此示例的前导/尾随空格的注释(并建议OP可能不想转换那些):

sed 's/ \+/,/g' file

并且大多数人会认为 TAB 是一个“空间”,人们可以使用更全面(但更复杂)的方法:

sed \
    -e ':loop' \
    -e 's/\([^[:space:]]\)[[:space:]][[:space:]]*\([^[:space:]]\)/\1,\2/g' \
    -e 't loop' file

需要循环来处理\1\2重叠的情况。

以下是输入示例:

total 36
drwx------ 5 root root  4096 Aug 21 03:58 0994576031
drwx------ 4 tom  users 4096 Aug 21 04:27 fake-tom
-rw-r--r-- 1 tom  users    0 Aug 21 04:53 foo
-rw-r--r-- 1 tom  users  155 Aug 21 04:27 gpgagent.log
drwx------ 2 tom  users 4096 Aug 21 04:27 gpg-MOxBtc
drwx------ 2 root root  4096 Aug 21 03:58 kde-root
drwx------ 2 tom  users 4096 Aug 21 04:27 ssh-cdcgKy3228
drwxrwxrwt 2 root root  4096 Aug 21 03:57 VMwareDnD
drwxr-xr-x 2 root root  4096 Aug 21 03:58 vmware-root
drwx------ 2 root root  4096 Aug 21 03:58 vmware-root-2999462734

和输出

total,36
drwx------,5,root,root,4096,Aug,21,03:58,0994576031
drwx------,4,tom,users,4096,Aug,21,04:27,fake-tom
-rw-r--r--,1,tom,users,0,Aug,21,04:53,foo
-rw-r--r--,1,tom,users,155,Aug,21,04:27,gpgagent.log
drwx------,2,tom,users,4096,Aug,21,04:27,gpg-MOxBtc
drwx------,2,root,root,4096,Aug,21,03:58,kde-root
drwx------,2,tom,users,4096,Aug,21,04:27,ssh-cdcgKy3228
drwxrwxrwt,2,root,root,4096,Aug,21,03:57,VMwareDnD
drwxr-xr-x,2,root,root,4096,Aug,21,03:58,vmware-root
drwx------,2,root,root,4096,Aug,21,03:58,vmware-root-2999462734