将文本文件中的所有空格替换为逗号

将文本文件中的所有空格替换为逗号

我需要用逗号替换文本中的所有空格。我目前正在使用这一行,但它不起作用:我得到一个与原始文件完全相同的文本文件作为输出:

sed 's/[:blank:]+/,/g' orig.txt > modified.txt

谢谢

答案1

使用 GNU sed

sed -e 's/\s\+/,/g' orig.txt > modified.txt

或者与perl

perl -pne 's/\s+/,/g' < orig.txt > modified.txt

编辑:要在 Perl 中排除换行符,您可以使用双重否定's/[^\S\n]+/,/g'或仅匹配您选择的空白字符's/[ \t\r\f]+/,/g'

答案2

使用tr

tr -s '[:blank:]' ',' <file

这将用逗号替换任何水平空白。任何重复的空格只会被替换为单个逗号。

答案3

你的命令有问题,

sed 's/[:blank:]+/,/g' orig.txt > modified.txt

是双重的:

  1. [:blank:]与字符:, a, b, k, l, 或之一匹配的括号表达式n。如果要匹配 POSIX 字符类中的字符之一[:blank:],请使用[[:blank:]]

  2. +一个扩展的正则表达式修饰符。该sed实用程序使用基本的正则表达式,并且+会匹配文字+字符。要在基本正则表达式中获得相同的效果,请使用\{1,\}, 或者,在此特定表达式中,请使用[[:blank:]][[:blank:]]*

简而言之,你的正确sed表达是

sed 's/[[:blank:]]\{1,\}/,/g' orig.txt >modified.txt

或者

sed 's/[[:blank:]][[:blank:]]*/,/g' orig.txt >modified.txt

正如其他人所指出的,假设文本中使用单字节 ASCII 字符,tr在这种情况下使用可能更有效,因为它是一组字符到另一组字符的简单音译。以下两个命令之一tr可以解决该问题:

tr -s '[:blank:]' '[,*]' <orig.txt >modified.txt

其中[,*]表示“该组所需的逗号数量与第一组中的字符数匹配”,或

tr -s '\t ' ',,' <orig.txt >modified.txt

-s选项会tr导致多个连续的逗号被“挤压”成单个逗号。

答案4

awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 

这里的文件名是Servers..它包含以下内容..

Server1
Server2
Server3

如果我们使用上面的命令,我们可以得到以下输出。

Server1,Server2,Server3,


[mohramak@oc3246038448 Desktop]$ cat Servers
Server1
Server2
Server3
[mohramak@oc3246038448 Desktop]$ awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 
Server1,Server2,Server3,
[mohramak@oc3246038448 Desktop]$ 

相关内容