想知道用一个逗号替换一个或多个连续空格的最有效解决方案?单个命令是首选。 :)
我正在使用Mac OS / Linux。
提前谢谢, 林答案 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