テキストを含む大きなテキストファイルがあります。各単語は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/pg
g
(フラグ)をすべてo
に置き換え0
、置換(フラグ)が行われると、パターンスペースのみがp
標準出力に書き込まれます。