我正在尝试确定一种方法来删除字符串中等号周围的前导和尾随空格。空白可能存在(也可能不存在)。可能有 0 个、1 个或多个等号。
我一直在尝试使用sed
,但它失败得很惨,甚至不值得展示什么不起作用。我想我可能使用了错误的工具来完成这项工作。我不认为sed
正则表达式可以用来解决这个问题,但我可能是错的。
如何删除等号之间的空格?
实际问题在概念上很简单。我有一个带有零个或多个选项的字符串a=b
。一个选项可以提供为a=b
,a = b
或者类似的东西a= b
。我需要将其标准化为a=b
.
多行字符串中可能存在极端情况,例如CR
和。LF
我还没有达到打破空白很重要的地步。如果我能做到这一点,那么我倾向于将其称为格式错误并拒绝多行字符串。
答案1
由于 don_crissti 和 Julie Pelletier 都没有将完美的评论转化为答案,因此 Don 得出了以下结论:
sed 's/[[:blank:]]*=[[:blank:]]*/=/g'
...它使用正则表达式和字符类来sed
实现目标。内部[:blank:]
捕获空格或制表符;外部[]*
表示捕获零个或多个空格/制表符;等号代表其自身,然后重复相同的正则表达式。 (可选)空白、等号和(可选)空白全部替换为等号,并且该g
标志告诉 sed 在该行的每个匹配项上重复搜索和替换。
输入示例:
$ cat input
a=b a = b a= b a =b
和输出:
$ sed 's/[[:blank:]]*=[[:blank:]]*/=/g' input
a=b a=b a=b a=b
答案2
我会用 emacs 这样做:
$x replace-regexp
\s *=\s *
=
其中\s *=\s *
是标识等号周围任何空格的正则表达式,并且=
是应该替换的内容。通常,\sC
被解释为字符类C
,在本例中为空格(也可以是制表符)。如果您只需要空格,请使用*
(即 * 之前的空格)。
您似乎有第二个问题,How do I delete whitespace between equal signs?
在这种情况下,您会想要:
$x replace-regexp
=\s *=
==
我总是必须重新查找 sed 和 awk。如果我可以使用它,我总是会使用 emacs。在 emacs 中,您需要使用C-h i
访问信息系统,然后m emacs
使用 访问 emacs 上的信息,然后regexp
在该信息页面中进行搜索。
答案3
没有提到,但是 Perl:
s/\s*=\s*/=/g;