在两个模式之间搜索模式,然后使用sed命令在该模式的上方或下方添加一行

时间:2014-02-10 10:30:05

标签: sed

让我们有像..

这样的文件
Mango
Apple
Orange
Lenovo
Cherry
Stack
Stack

现在我想在包含 apple stack 的行之间搜索 cherry ,并在 cherry <上方插入一个新行< / em>

输出应该看起来像

Mango
Apple
Orange
Lenovo
**NEWLINE**
Cherry
Stack
Stack

3 个答案:

答案 0 :(得分:1)

使用sed

sed '/Apple/,/Stack/{s/Cherry/**Newline**\n&/}' file

解释

  • /Apple/,/Stack/搜索AppleStack
  • 之间的模式
  • s/Cherry/**Newline**\n&/替换命令s

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed '/apple/I,/stack/I!b;/cherry/Ii\\' file

答案 2 :(得分:0)

使用awk

awk '/Apple/,/Stack/ {if ($0~/Cherry/) $0="**NEWLINE**"RS$0}8'
Mango
Apple
Orange
Lenovo
**NEWLINE**
Cherry
Stack
Stack

此搜索从AppleStack,如果找到Cherry行,则在上方插入新行。