Bash regexp:如何用字母替换所有非空白字符?

时间:2016-02-20 07:20:54

标签: regex linux bash shell sed

我有一个包含大量空格和一些其他ASCII字符的文本文件。我想使用Bash(最好通过sed)用文件M替换文件中的任何非空格字符。我该怎么做呢?

感谢您的帮助。

编辑:对于downvoters,我尝试运行这个:

sed -i 's/[^\s]/M/g' file

和此:

sed -i 's/[^\s]/M/' file

但他们都没有成功。我对正则表达式有点不熟悉,如果我做了一些明显错误的事情,请道歉。

2 个答案:

答案 0 :(得分:3)

您可以使用POSIX字符类:

sed -i 's/[^[:space:]]/M/g' file

例如:

$ echo 'a b       c' | od -a                  
0000000   a  sp   b  sp  ht   c  nl
0000007
$ echo 'a b       c' | sed 's/[^[:space:]]/M/g' | od -a
0000000   M  sp   M  sp  ht   M  nl
0000007

注意:

  • g命令的s标志,因为您要替换行中的所有匹配项

答案 1 :(得分:2)

使用tr

tr -c '[:space:]' M < file