我需要用逗号替换文本中的所有空格。我目前正在使用这一行,但它不起作用:我得到一个与原始文件完全相同的文本文件作为输出:
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
是双重的:
是
[:blank:]
与字符:
,a
,b
,k
,l
, 或之一匹配的括号表达式n
。如果要匹配 POSIX 字符类中的字符之一[:blank:]
,请使用[[:blank:]]
。是
+
一个扩展的正则表达式修饰符。该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]$