首页 > 解决方案 > 使用 sed 删除美元符号一侧的空间

问题描述

我想转换

Some text $ latex code  $ some more text

Some text $latex code$ some more text

以合理的效率使用 sed (或其他东西)。

我尝试使用删除第一个空格

sed -e 's/\$\s*/\$/g' 

但这使得$ some$some是不可取的。同样,我可以为第二个 $ 执行此操作,但这也会在前面产生类似的问题。

然后我尝试像这样捕获组:

sed -e 's/\$\s*\(.*\)\s*\$/\$\1\$/g'

这不起作用(可能是因为 (.*) 组包括 \s 和 $?)。它的输出是

Some text $latex code  $ some more text

那么我怎样才能有效地做到这一点呢?如果答案也可以容纳跨越两行的 $$,那就太好了。

标签: regextextsed

解决方案


使用GNU sed:

sed 's/\$ \+/$/; s/ \+\$/$/2' file

或与\s(匹配空格和制表符):

sed 's/\$\s\+/$/; s/\s\+\$/$/2' file

输出:

一些文本 $latex code$ 一些文本

\+: 表示前面的表达式必须至少匹配一次或多次

$: 美元符号,这里没有特殊含义

2:仅替换正则表达式的第二个匹配项


推荐阅读