想要在行中添加一个特定的单词,并在文件的该行下方添加一行新行

时间:2019-04-23 22:06:13

标签: linux bash

我只想在对象主机行(linux.google.com)中重复特定的单词,然后在该对象主机行下方添加新行。     显示名称=“ A:Linux.google.com”

object Host "linux.google.com" {
import "windows"
address = "linux.google.com"
groups = ["linux"]
}

object Host "kali.google.com" {
import "linux"
address = "linux.google.com"
groups = [linux ]
}

object Host "windows.google.com" {
import "linux"
address = "linux.google.com"
groups = ["windows" ]
}

object Host "os.google.com" {
import "windows"
address = "linux.google.com"
groups = ["linux"]
}

我正在搜索linux.google.com

如果在“对象主机”行中找到了字符串,那么我要输入新行(显示名称“ A:Linux.google.com”)(显示名称“ B:os.google.com”),如下所述。 / p>

object Host "linux.google.com" {
Display name "A: Linux.google.com"
import "windows"
address = "linux.google.com"
groups = ["linux"]
}

object Host "os.google.com" {
Display name "B: os.google.com"
import "windows"
address = "linux.google.com"
groups = ["linux"]
}

但是只能在对象宿主行中搜索字符串,而不能在任何其他行中搜索

2 个答案:

答案 0 :(得分:2)

您可以使用sed中的一行来完成此操作:

> sed -i '/object Host "linux.google.com"/a Display name "A: Linux.google.com"' input.txt

工作原理:

  • -i选项告诉sed就地修改文件(例如,您不必进行临时复制,然后用临时复制覆盖原始文件)
  • /object Host "linux.google.com"/sed address。它告诉sed要在哪一行上进行操作。在这种情况下,它是一个正则表达式。但是sed具有多种形式的地址,包括行号,行号范围等。
  • 地址正则表达式后的ased append命令。将a后的所有内容附加在与地址匹配的行下方的行上。

答案 1 :(得分:0)

我不知道如何用sed做到这一点。但是,我们可以执行以下操作。
假设input为文件名,output为输出文件。

while IFS= read -r var; do 
  echo "$var"; 
  if [[ $var == *"Host \"linux.google.com\""* ]]; then 
    echo "Display name \"A: Linux.google.com\""; 
  fi; 
done < input > output

代码非常简单。它每行读取您的文件行,并验证该行是否包含您要匹配的关键字。如果为true,则会在下面的行中打印您想要的内容。