如何复制匹配字符串的整行并在其后粘贴?

时间:2017-03-02 22:15:01

标签: shell unix sed grep

我正在尝试使用grep命令在文件中搜索特定行,并且我成功地这样做了。现在我想将整行复制到原始行后面的新行。换句话说,原始行后面应该跟有相同内容的新行。

例如: 原始数据:

Apple 

Samsung

Nokia

HTC

说我是否希望新数据看起来像

Apple

Samsung

Samsung

Nokia

HTC

我用sed尝试了grep和pipe,但我失败了。有人可以帮我这个吗?

由于

6 个答案:

答案 0 :(得分:2)

使用sed,您可以默认使用-n关闭打印行,并使用p显示行。使用此信息将显示解决方案

sed '/Samsung/p' yourfile
# Or, when you want to match the whole line
sed '/^Samsung$/p' yourfile

答案 1 :(得分:1)

要复制整个行匹配模式,然后将其粘贴到新行上,就在此之后:

sed -i $'s/.*Samsung.*/&\\\n&/' file

输出:

Apple
Samsung
Samsung
Nokia
HTC

要将结果输出到另一个文件。

sed $'s/.*Samsung.*/&\\\n&/' file > anotherfile

答案 2 :(得分:0)

对于包含内容

的文件input.txt
Apple
Samsung
Nokia
HTC

你可以进行内联替换,复制“三星”这样的行:

sed -i 's/\(Samsung\)/\1\n\1/' input.txt

括号捕捉到该单词,然后\1将其放回两次,其间有换行符。

答案 3 :(得分:0)

使用此sed

sed $'s/Samsung/&\\\n&/' input.txt

输出:

Apple
Samsung
Samsung
Nokia
HTC

另见:

答案 4 :(得分:0)

这可能适合你(GNU sed):

sed '/pattern/H;//G' file

如果模式可以出现多次:

sed 'x;z;x;/pattern/H;//G' file

答案 5 :(得分:0)

为了完整性:

awk '/Samsung/ {print}; {print}' file
perl -pe 'print if /Samsung/' file