【问题标题】:sed: remove parentheses from stringsed:从字符串中删除括号
【发布时间】:2019-07-24 21:28:17
【问题描述】:

我使用的是 Mac。

我正在尝试使用 sed 从字符串中删除所有括号 ( 和 )。

输入:this string contains (parentheses)

所需输出:this string contains parentheses

我试过了:

sed -E 's/[\)\(]//g'

但无论我是否转义括号,我仍然只能得到第一个匹配项(并因此删除)。

编辑:问题出在输入字符串上:

近括号是 ASCII 41,而我的输入有 ASCII 239,它解释了失败的原因。更令人困惑的是,这等同于尖锐的口音。仔细检查表明,如果没有以下“空格”,则无法选择 )。

【问题讨论】:

  • sed -i '' 's/[()]//g' file 应该可以工作。
  • 我的输入字符串有些奇怪(我是从另一个来源获得的输出):无论我尝试什么解决方案,我都无法获取结束括号')'。我需要更仔细地查看字符串包含的内容。

标签: bash sed


【解决方案1】:

tr 带有 -d(删除)标志是我删除一个或多个字符的 goto。从手册页:

tr 实用程序将标准输入复制到标准输出,并替换或删除选定的字符。

echo -n 'this string contains (parentheses)' | tr -d '()'
# this string contains parentheses

【讨论】:

  • 谢谢。请参阅我对问题的评论。似乎输入有一些奇怪的东西!如果我从头开始创建输入字符串,您的答案就可以正常工作。
  • hexdump 中查看,它可能不是 ascii paren
【解决方案2】:

只是不要使用反斜杠(键入 \( 元匹配括号)或 -Extended 模式匹配(这将需要反斜杠到 UN-meta-fy)。

$: echo "this string contains (parentheses)" | sed 's/[)(]//g'
this string contains parentheses

【讨论】:

  • 谢谢。请参阅我对问题的评论。似乎输入有一些奇怪的东西!如果我从头开始创建输入字符串,您的答案就可以正常工作。
  • [] 内。无论是否使用-E,都无需转义。
  • 好点,这是一个固有的转义上下文,所以添加 \'s 也只是将它们从字符串中删除。
  • 如果你想在 [] 中使用 '[' 怎么办?
  • sed 's/[[]//g;' 会这样做,但要获得],您可能需要执行类似sed 's/\[//g; s/\]//g;' 的操作
猜你喜欢
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
相关资源
最近更新 更多