所以我在某个档案中寻找一些东西:
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但在“文件中的其他内容之前”。基本上我想附加一行但不是在文件的末尾,而是在搜索结果之后。
答案 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开头的第一行,在下面添加新行(插入以“。”行结尾),保存并退出