如何将每行输入的管道加倍?
例子:
echo "foobar" | MYSTERY_COMMAND
foobar
foobar
答案1
只需使用sed p
.
echo foobar | sed p
你也不需要cat
:
sed p input.txt
# or
sed p input.txt > output.txt
解释
p
是sed
“打印”的命令。
打印也是sed
的默认行动。因此,当您sed
明确告诉打印时,结果是它打印每一行两次。
假设您只想打印包含单词“kumquat”的行。您可以使用-n
to 抑制sed
的默认打印操作,然后明确告诉它打印匹配的行/kumquat/
:
sed -n /kumquat/p
或者,如果您只想打印第 5 行而不打印其他内容:
sed -n 5p
或者,如果您想打印从第 15 行到第 27 行的每一行:
sed -n 15,17p
如果你想打印每一行除了包含“kumquat”的行,您可以通过删除所有金橘行,并让sed
打印该行的默认操作发生在未删除的行上来实现此目的。您不需要该-n
标志或显式p
命令:
sed /kumquat/d
sed
使用简单的模式——动作语法。在上面的示例中,我展示了基于行号的模式和基于正则表达式的模式,以及两个操作(打印和删除)。 sed
有一个很多比那更有力量。
我真的应该包括最常见和最有用的sed
命令:
sed s/apples/oranges/g
这会将“苹果”的每个实例替换为“橙子”并打印结果。
g
(如果在 ubstitute 命令中省略lobal 标志s
,则只有每行的第一个实例会被更改。)
进一步阅读(强烈推荐):
答案2
cat input.txt | awk '1;1' > output.txt
编辑:这是 joepd 的简洁版本,原文如下
cat input.txt | awk '{print $0 "\n" $0}' > output.txt