0

次の形式のデータを含むファイルがあります

<A/Here>  <A/There>
<B/SomeMoreDate> <C/SomeOtherDate>

今、効率的な方法でファイルからすべての A、B、C を削除したいと考えています。1つのパターンにsedを使用できることを知っています

sed -i 's/A//g' /path/to/filename.

しかし、すべてのパターンを削除sedする to を含むように指定するにはどうすればよいでしょうか?or

予想される出力は次のとおりです。

<Here>  <There>
<SomeMoreDate> <SomeOtherDate>
4

4 に答える 4

2

使用できますsed -i 's/[ABC]//g' /path/to/filename。またはまたは[ABC]のいずれかに一致します。このリファレンスは役に立つかもしれません。ABC

于 2013-10-30T08:48:04.127 に答える
2

GNU sed を使用している場合は、次のように言えます。

sed -r 's#(A|B|C)/##g' filename

それ以外の場合は、次のように動作するはずです。

sed 's#A/##g;s#B/##g;s#C/##g' filename
于 2013-10-30T08:56:14.163 に答える
0

Ivaylo Strandjev の答えは、単一の文字を一致させたい場合の問題を解決するという点で正しいです。長い文字列に一致する場合に or を使用する方法があります。

s/\(\(stringA\)\|\(stringB\)\|\(stringC\)\)something/something else/

次のようなもので試すことができます:

echo stringBsomething | sed -e 's/\(stringA\|stringB\|stringC\)something/something else/'

sedこれらすべてのバックスラッシュが必要なのは悲しいことです。を使用すると、これが回避される場合もあります-r

于 2013-10-30T09:00:45.687 に答える