【问题标题】:Removing space on one side of dollar sign using sed使用 sed 删除美元符号一侧的空间
【发布时间】:2021-02-02 08:06:51
【问题描述】:

我要转换

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

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

【问题讨论】:

  • 如果要删除空格,我建议使用空格。
  • 对不起,我不明白你的意思。我基本上在这个网站上学习了我所有的 sed 阅读示例。你能解释一下吗?
  • 使用空格而不是 \s。
  • 好的,我会尝试报告
  • 这确实有帮助,但并没有解决整个问题。现在我可以删除两边的一个空格,如果它存在的话。如果我必须替换多个空格(如上面给出的示例),它就不起作用。我尝试使用`*`,但它的行为就像\s*

标签: regex text sed


【解决方案1】:

使用 GNU sed:

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

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

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

输出:

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

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

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

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

【讨论】:

  • 适用于多个空间;如果 Some text 被删除,只会做一些奇怪的事情,但这很好。你能告诉我这些\+$/2是什么吗?
  • @physicophilic:我已经更新了我的答案。这可能会有所帮助:man 7 regexThe Stack Overflow Regular Expressions FAQ
  • $ 符号不是要转义的吗?我问这个是因为你留下两个 $ 标志未转义
  • sed 的s 命令使用此语法s/regex/replace/flags。如果您在 regex 部分中使用 $ 而没有反斜杠,则它是一个特殊字符,它标志着一行的结尾。使用反斜杠没有特殊含义。替换部分中的$ 没有特殊含义。标志是可选的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
相关资源
最近更新 更多