用sed删除额外的空格

时间:2014-08-01 14:57:08

标签: sed

我有一个看起来像这样的函数:

myfunc("arg1", "arg2", "arg3" );

注意最后的额外空间。我试图用sed删除那个多余的空间。现在,我只是用echo测试它,而不是在真实文件上进行测试。我的命令是

echo 'myfunc("arg1", "arg2", "arg3" );' | sed 's/myfunc\(.* \);/myfunc\(.*\);/g'

但是当我运行它时,它只是输出原始文本,没有任何变化(包括额外的空间)。

2 个答案:

答案 0 :(得分:2)

你可以试试下面的sed命令,

$ echo 'myfunc("arg1", "arg2", "arg3" );' | sed 's/^\(.*\) /\1/g'
myfunc("arg1", "arg2", "arg3");

<强>解释

  • ^\(.*\)从起始到最后一个空格字符中捕获所有字符。(不包括最后一个空格字符)。 (我在模式中包含空格字符,但无法显示。
  • 在替换部分中,所有匹配的字符将被第一个捕获的组中的字符替换。

OR

$ echo 'myfunc("arg1", "arg2", "arg3"  );' | sed -E 's/(myfunc\(.*[^ ]) +(\))/\1\2/g'
myfunc("arg1", "arg2", "arg3");

答案 1 :(得分:0)

这应该有效:

echo 'myfunc("arg1", "arg2", "arg3" );' | sed -e 's/[[:space:]]\{1,\})/)/'

它在右括号之前删除一个或多个空格。我不确定你使用的是什么版本的sed,但是它应该适用于任何一种。

输出:

myfunc("arg1", "arg2", "arg3");