入力する:
United+States
出力:
United States
sed
私はそれを成功させずに何度も試してみました。
答え1
デフォルトでは、sed
BRE(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 + b
a++b
このパターンは、\>
単語の終わりの幅がゼロの空白と一致し、\<
単語の先頭でも同様です。 GNUは(単語の始まりまたは終わり)sed
も理解していますが、BSDはおよびについて知っており、これはそれぞれと同じように機能します。\b
sed
[[:<:]]
[[:>:]]
\<
\>
答え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コマンドを使用する方法のクイックガイド