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

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

我有一个很大的文本文件,里面有文字。每个单词都在一行上(典型的单词列表)。

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

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

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

如果每行都匹配,混沌的答案就很好。但如果某些行不包含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标志)owith 0,如果进行了替换(p标志),则仅将模式空间写入标准输出。

相关内容