我有一个很大的文本文件,里面有文字。每个单词都在一行上(典型的单词列表)。
我想将每个单词中的所有字符“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
标志)o
with0
,如果进行了替换(p
标志),则仅将模式空间写入标准输出。