将大字表中的“o”替换为“0”并保存原始单词?

pro*_*ngs 5 sed awk text-processing

我有一个包含单词的大文本文件。每个词都在一行上(典型的词表)。

我想将每个单词中的所有字符“o”替换为数字“0”,并将新形成的单词粘贴在原始单词之后的下一行。

例如,如果我们在列表中有这两个:

dog
someone
Run Code Online (Sandbox Code Playgroud)

操作后,我们的文件应该是这样的:

dog
d0g
someone
s0me0ne
Run Code Online (Sandbox Code Playgroud)

如何使用sed或 之类的 GNU 工具完成此操作awk

cha*_*aos 11

您可以使用sed

sed -i -e 'p' -e 's/o/0/g' file
Run Code Online (Sandbox Code Playgroud)

解释:

  • -i: 激活文件的就地编辑
  • -e 'p': 只是粘贴行
  • -e 's/o/0/g': 用 0 替换 o 并粘贴更改后的行

如果你想要一个awk解决方案:

awk '1;gsub("o", "0")' file >new_file
Run Code Online (Sandbox Code Playgroud)


phe*_*mer 7

如果每一行都匹配,混乱的答案是好的。但是如果某些行不包含 a o,它们将被复制。
例如:

$ echo -e 'foo\nbar' | sed -e 'p' -e 's/o/0/g'
foo
f00
bar
bar
Run Code Online (Sandbox Code Playgroud)

 

以下是一些不重复行的其他解决方案:

$ echo -e 'foo\nbar' | sed -e '/o/ p; s//0/g' 
foo
f00
bar
Run Code Online (Sandbox Code Playgroud)

 

$ echo -e 'foo\nbar' | perl -pe '/o/ && print; s/o/0/g'
foo
f00
bar
Run Code Online (Sandbox Code Playgroud)

 

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