2

所以我在某个文件中寻找一些东西:

grep "import" test.txt | tail -1 

在 test.txt 中有

import-one
import-two
import-three

some other stuff in the file

这将返回最后的搜索结果:

import-three

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

4

4 回答 4

2

我了解您在每个搜索结果之后都需要一些文本,这意味着在每个匹配行之后。所以试试

grep "import" test.txt | sed '/$/ a\Line to be added'
于 2013-05-28T15:46:07.647 回答
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
于 2013-05-28T15:36:08.357 回答
1

使用ed

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

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

于 2013-05-28T16:25:16.393 回答
1

假设您无法区分不同的“导入”句子的一种方法。它用 反转文件tac,然后用 找到第一个匹配项(导入三)sed,在它之前插入一行(i\)并再次反转文件。

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

该命令是通过几行编写的,因为sed插入命令的语法非常特殊:

$ 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
于 2013-05-28T15:47:13.587 回答