行をコピーし、sedを使用して重複行を検索して置き換える方法は?

行をコピーし、sedを使用して重複行を検索して置き換える方法は?

特定の特殊文字を含むテキストファイルの行をコピーしようとしますが、コピー内の特殊文字は「一般」ASCII文字に置き換えられます。特定のユースケースはアクセント文字です。

入力する:

éva
test
frédéric

希望の出力:

éva
eva
test
frédéric
frederic

これで、文字を含む行をコピーできますが、éキャプチャグループ内で検索して置き換える方法がわかりません。

これが私が今まで得たものです:

echo 'éva\ntest\nfrédéric' | sed 's/\(.*é.*\)/&\n\1/'

私はこれを行うことができますかsed?そうでなければ、一緒に働きたいawk...

ベストアンサー1

複数のコマンドを一致させéた後に適用できます。

sed '/é/{p;s/é/e/g;}'

埋め込み行の場合は、é現在のパターンスペースを印刷してから、すべてのésを次に置き換えますe(そしてパターンスペースを再印刷します)。

AWKに対応するものは次のとおりです。

awk '/é/{print; gsub(/é/, "e")}1'

sedこのsコマンドはアドレスパターンを再利用できます。

sed '/é/{p;s//e/g;}'

置換項目がすべて単一文字置換の場合、このyコマンドはより効率的です。

sed '/é/{p;y/é/e/;}'

おすすめ記事