使用sed删除额外空格

使用sed删除额外空格,sed,Sed,我有一个函数如下所示: myfunc("arg1", "arg2", "arg3" ); 请注意末尾的额外空间。我正试图用sed删除多余的空间。现在,我只是用echo测试它,而不是在真实的文件上进行测试。我的命令是 echo 'myfunc("arg1", "arg2", "arg3" );' | sed 's/myfunc\(.* \);/myfunc\(.*\);/g' 但是当我运行它时,它只输出原始文本,没有任何更改(包括额外的空间)。您可以尝试下面的sed命令 $ echo 'myf

我有一个函数如下所示:

myfunc("arg1", "arg2", "arg3" );
请注意末尾的额外空间。我正试图用sed删除多余的空间。现在,我只是用
echo
测试它,而不是在真实的文件上进行测试。我的命令是

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

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

您可以尝试下面的sed命令

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

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

这应该奏效:

echo 'myfunc("arg1", "arg2", "arg3" );' | sed -e 's/[[:space:]]\{1,\})/)/'
它在右括号前删除一个或多个空格。我不确定您使用的是哪个版本的sed,但这应该适用于任何一个版本

输出:

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

你能解释一下这是怎么得到空间的吗?这是可行的,但我不知道怎么做。看起来好像没有寻找任何额外的空格,因为右括号跟在星号后面。这段代码删除给定行中的最后一个空格,不管它在哪里,对吗?例如
fun(“a”、“b”、“c”)
->
fun(“a”、“b”、“c”)
fun(“a”、“b”、“c”)->
乐趣(“a”、“b”、“c”)@Kent我是根据op的输入发布的。谢谢你更新你的描述-我开始理解这一点了。我对你的答案进行了一点编辑,以使用扩展的REs,并使其能够捕获所有额外的空格,并且仅限于括号中的部分。您可以将其添加到您的答案中:
echo'myfunc(“arg1”、“arg2”、“arg3”);|sed-E的/(.*[^])+(.*/\1\2/g'
Oops-一个小改动,使它在更一般的设置中工作:
sed-E的/(myfunc\(.[^])+(\)/\1\2/g'
,这样它实际上可以在文件上使用。否则,它会拾取所有类型的空格并尝试删除它们。再次感谢你的帮助。
myfunc("arg1", "arg2", "arg3");