大きな単語リストで「o」を「0」に置き換えて元の単語を保存しますか?

大きな単語リストで「o」を「0」に置き換えて元の単語を保存しますか?

テキストを含む大きなテキストファイルがあります。各単語は1行(一般的な単語のリスト)にあります。

各単語のすべての文字「o」を数字「0」に置き換え、新しく形成された単語を元の単語の後ろの次の行に貼り付けたいと思います。

たとえば、リストに次の2つがあるとします。

dog
someone

作業後、ファイルは次のようになります。

dog
d0g
someone
s0me0ne

sedこれを行うためにGNUツールをどのように使用または待つことができますかawk

答え1

あなたはそれを使用することができますsed

sed -i -e 'p' -e 's/o/0/g' file

説明する:

  • -i:ファイルの内部編集を有効にします。
  • -e 'p':ちょうど線を貼り付けてください
  • -e 's/o/0/g':o を 0 に置き換え、変更された行を貼り付けます。

解決策が必要な場合awk

awk '1;gsub("o", "0")' file >new_file

答え2

すべての行が一致した場合、Chaosの答えは大丈夫です。ただし、一部の行が含まれていない場合はo繰り返されます。
たとえば、

$ echo -e 'foo\nbar' | sed -e 'p' -e 's/o/0/g'
foo
f00
bar
bar

 

行を繰り返さない他の解決策は次のとおりです。

$ echo -e 'foo\nbar' | sed -e '/o/ p; s//0/g' 
foo
f00
bar

 

$ echo -e 'foo\nbar' | perl -pe '/o/ && print; s/o/0/g'
foo
f00
bar

 

$ echo -e 'foo\nbar' | awk '{ print } /o/ { gsub(/o/, "0"); print }' 
foo
f00
bar

答え3

別のsed解決策:

sed -ne 'p;s/o/0/pg' file

$ printf '%s\n%s\n' 'foo' 'bar' | sed -ne 'p;s/o/0/pg'
foo
f00
bar

説明する

  • -nオプションはsedデフォルト出力を抑制します。
  • pこのコマンドは、パターン空間を標準出力に書き込みます。
  • s/o/O/pgg(フラグ)をすべてoに置き換え0、置換(フラグ)が行われると、パターンスペースのみがp標準出力に書き込まれます。

関連情報