sedでプラス記号をスペースに置き換える方法は?

sedでプラス記号をスペースに置き換える方法は?

入力する:

United+States

出力:

United States

sed私はそれを成功させずに何度も試してみました。

答え1

デフォルトでは、sedBRE(Basic Regular Expressions)が使用され、プラス記号は特別ではありません。したがって、s通常の文字のようにコマンドで使用できます。

<<< 'United+States' sed 's/+/ /g'

g同じ行の複数のインスタンス()または複数行のファイルを変更する場合

sed 's/+/ /g' filename

拡張正規表現(ERE、sed -Eそれをサポートするバージョンsed)を使用する場合は、プラス記号をエスケープする必要があります。

sed -E 's/\+/ /g' ...

(望むよりこの問題正規表現バリアントの違いを理解します。 )

答え2

$ echo 'United+States' | tr '+' ' '
United States

1文字だけを変更するので、使用する方が高速ですtr

同等のsedスクリプトは次のとおりです。

$ echo 'United+States' | sed 'y/+/ /'
United States

または

$ echo 'United+States' | sed 's/+/ /g'
United States

yのコマンドは、sed最初の文字グループ(+ここでは空白のみ)のすべての項目を2番目のグループの対応する文字(ここでは空白のみ)に置き換えます。

このsコマンドは、正規表現に一致するテキストをいくつかのテキストに置き換えます。の場合gは表示されるたびにこれを行います。これがなければ、各入力ラインの最初の項目でのみ機能します。


プラス記号の両側に単語がある場合にのみ、プラス記号をスペースに変更します。

sed 's/\>+\</ /g'

に変更されますが、a+b同じa bままです。a + ba++b

このパターンは、\>単語の終わりの幅がゼロの空白と一致し、\<単語の先頭でも同様です。 GNUは(単語の始まりまたは終わり)sedも理解していますが、BSDはおよびについて知っており、これはそれぞれと同じように機能します。\bsed[[:<:]][[:>:]]\<\>

答え3

この例を確認し、結果に基づいて作業できます。

例: - このコードは変更を行い、変更されたファイルを "songs2.txt"に書き込みます。出力ファイルには以下が含まれます。

1.ジャスティンティンバーレイク、タイトル545、価格$7.30
2.テイラースウィフト、タイトル723、価格$7.90 3. ミックジャガー、
タイトル610、価格$7.90 6. エルビス・プレスリー(Elvis Presley)、タイトル335、価格 $7.30 7. ジョン・レノン、タイトル271、価格 $7.90




「のすべての項目を変更したい場合現金「そして」ごみ「使用する:

sed 's/Cash/Trash/' songs.txt > songs2.txt

参照リンク:-LinuxでSedコマンドを使用する方法のクイックガイド

関連情報