0

どうすればsedで何tr "ae" "ea"ができますか? この質問のような一時的な文字列を使用することはできません。テキストに表示されないことが保証されている文字列を知らないためです。

たぶん、最初にすべての「a」、「e」、および「\」をバックスラッシュなどでエスケープできます...またはもっと簡単な方法はありますか?

ありがとう。

4

2 に答える 2

3

あなたは答えを得ましたが、「テキストに表示されないことが保証されている文字列がわからないため、この質問のように一時的な文字列を使用することはできません」というステートメントを書いています。次のような文字列を作成できます。

sed 's/@/@A/g; s/foo/@B/g; s/bar/foo/g; s/@B/bar/g; s/@A/@/g' file

上記は、すべての「@」文字を文字列「@A」に変換してから、最初に「foo」を「@Bs」に変換することによってfooとbarを交換します。その時点で、テキストに「@Bs」がないことを保証できます。これは、最初のs //のおかげで、すべての元の「@」に「A」が付​​いているためです。残りは明白なはずです。

これは、他のコマンドを使用してファイルに対して他の操作を実行する必要があり、入力に含まれないことが保証されている文字列が必要な場合に非常に便利な手法です。

sed 's/@/@A/g' file | <commands using @B, @C, etc.> | sed 's/@A/@/g'

明らかに、途中で使用するコマンドが、出力の一部として「@A」(または選択した置換文字列)を生成しないようにする必要があります。

于 2012-12-21T14:56:43.487 に答える
1

変換 (y) コマンドを使用できます。

sed 'y/ae/ea/'

> エコーエアロダム | sed 'y/ae/ea/'
耳腫

于 2012-12-21T13:48:51.853 に答える