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 '<>,' ''(クリスダウンの答えのように)。
キーストンプソン

1
@KeithThompson:、tr -d '<>,'最後に ''なしで、ない?
ユーザー不明

@userunknown:はい、修正してくれてありがとう。
キーストンプソン

回答:


42

sed

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

tr

tr -d '<>,'

2
正しいですが、個人的に|は区切り文字としての使用が少し混乱します。 sed 's/[<>]//g'少し読みやすいです。
キーストンプソン

@KeithThompson私は実用性のためにそれを使用します。私は、リテラル|を扱う必要があるよりも、リテラルを扱う必要があります(したがって、エスケープする必要があります)/
クリスダウン

2
公正なポイント。一方、|は、多くの場合、メタ文字であり、一部の正規表現構文の代替に使用されます(ただしsed、特に必要\|です)。個人的に、リテラル/文字を処理する必要がある場合、通常,は区切り文字として使用します。
キーストンプソン

1
上記の個人的/特定の状況とは別に、非標準の区切り文字を使用する場合、固有の構文の違いが1つあります。最初の非/区切り文字は、sed範囲ごと にエスケープする必要があります。例:printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
Peter.O

8

これを試してください: sed 's/[<>,]//g'


そこにある縦棒は何ですか?
ポールトムブリン

sed 's / [<|> |] / / g'-sが検索を行います。/は区切り文字です。[]ブラケットは、複数のことを検索できるようにします。| 縦線は論理的なorで、gはグローバルまたはファイル全体を検索するためのものです。
イマン

3
|内にs は必要ありません(または、実際には必要ありません)[]。を使用します's/[<>,]//g'
ケビン

2
縦線は必要ありません。角括弧内のすべてのものがリストとして検索されます。 sed 's/[<>,]/ /g'あなたのアイデアも同様に垂直バーを削除することを除いて、正確に動作します。
ポールトンブリン

追加するには、おそらく正規表現を調べたいと思うでしょう。これは最も簡単な例の1つですが、すでにその力を示しています。
ベルンハルト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.