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)
如果每一行都匹配,混乱的答案是好的。但是如果某些行不包含 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)