使用sed摆脱字符<>,


18

我有一个包含以下内容的文件:

...
... <230948203[234]>, ...
... <234[24]>, ...
..

我想使用sed删除字符< ,>从每一行

我尝试使用,sed 's/<>,//g'但是没有用(它没有改变任何东西)。我是否需要转义这些特殊字符。是否可以使用单个sed命令删除多个字符?


2
bash-3.2$ echo "<230948203[234]>," | tr '<>,' ' '-> 230948203 [234]EDITED Thanks to Paul

3
@srikanthradix:不会删除这些字符,而是将它们替换为空格。您想要tr -d '<>,' ''(如Chris Down的回答)。
基思·汤普森

1
@KeithThompson:,最后tr -d '<>,'没有“”,不是吗?
用户未知

@userunknown:是的,感谢您的纠正。
基思·汤普森

Answers:


43

sed

sed 's|[<>,]||g'

tr

tr -d '<>,'

2
正确,但是我个人觉得将其|用作分隔符有点令人困惑。 sed 's/[<>]//g'比较容易阅读。
基思·汤普森

@KeithThompson我将其用于实用性。我发现自己处理文字|(因此不得不逃避)要比处理文字要少得多/
克里斯·

2
一个公平的观点。另一方面,|它通常也是一个元字符,用于某些正则表达式语法中的替换(尽管对此sed特别需要\|)。就个人而言,如果我需要处理文字/字符,我通常将其,用作分隔符。
基思·汤普森

1
除了上述个人/特定情况外,使用非标准定界符时还存在一个固有的语法差异。必须为每个 sed范围表达式转义第一个非/定界符,例如:printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
Peter.O 2012年

8

试试这个: sed 's/[<>,]//g'


竖线有什么用?
Paul Tomblin,2012年

sed's / [<|> |] / / g'-s进行搜索;/是定界符;[]括号使我们可以搜索不止一件事;| 竖线是逻辑或,而g是全局搜索或整个文件。
伊曼2012年

3
您不需要(或实际上是需要)中|[]。使用's/[<>,]//g'
凯文(Kevin)

2
您不需要竖线。方括号中的任何内容都将作为列表进行搜索。 sed 's/[<>,]/ /g'会很好地工作,只是您的想法也会删除竖线。
Paul Tomblin,2012年

补充:也许您想研究正则表达式,这是最简单的示例之一,但已经证明了它的强大功能。
Bernhard
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.