如何在搜索结果后附加一行?

时间:2013-05-28 15:30:26

标签: bash grep

所以我在某个档案中寻找一些东西:

grep "import" test.txt | tail -1 

在test.txt中有

import-one
import-two
import-three

some other stuff in the file

这将返回最后一个搜索结果:

import-three

现在我如何添加一些text -after-- import-three但在“文件中的其他内容之前”。基本上我想附加一行但不是在文件的末尾,而是在搜索结果之后。

4 个答案:

答案 0 :(得分:2)

我知道您希望在每个搜索结果后面都有一些文字,这意味着在每个匹配的行之后。所以试试

grep "import" test.txt | sed '/$/ a\Line to be added'

答案 1 :(得分:1)

您可以使用sed

尝试这样的操作
sed '/import-three/ a\
> Line to be added' t

测试:

$ sed '/import-three/ a\
> Line to be added' t
import-one
import-two
import-three
Line to be added

some other stuff in the file

答案 2 :(得分:1)

假设你不能在不同的“导入”句子之间徘徊的一种方式。它用tac反转文件,然后用sed找到第一个匹配(import-three),在它之前插入一行(i\)并再次反转该文件。

:a ; n ; ba是一个循环,可以避免再次处理/import/匹配。

该命令通过多行写入,因为sed insert命令对语法非常特殊:

$ tac infile | sed '/import/ { i\
"some text"
:a
n
ba }
' | tac -

它产生:

import-one
import-two
import-three
"some text"

some other stuff in the file

答案 3 :(得分:1)

使用ed

ed test.txt <<END
$
?^import
a
inserted text
.
w
q
END

含义:转到文件末尾,向后搜索以import开头的第一行,在下面添加新行(插入以“。”行结尾),保存并退出