#linux #bash
#linux #bash
Вопрос:
Я хочу использовать grep для конкретного слова только в строке object Host ( 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
Если строка найдена в строке Object Host, я хочу ввести новую строку (отображаемое имя «A: Linux.google.com » ) (Отображаемое имя «B: os.google.com » ), как указано ниже.
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"]
}
Но ищите строку только в строке Object Host, а не в какой-либо другой строке
Ответ №1:
Вы можете сделать это с помощью одной строки в 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
адрес. Он сообщает,sed
с какими строками работать. В данном случае это регулярное выражение. Ноsed
имеет несколько форм адресов, включая номера строк, диапазоны номеров строк и т.д.a
После регулярного выражения адреса находится командаsed
добавить. Все, что вы ставите послеa
, добавляется в строку под той, которая соответствует адресу.
Комментарии:
1. Пожалуйста, взгляните на приведенный выше код, который я отредактировал, и дайте нам рекомендации по требованию @Mike Holt
Ответ №2:
Я не знаю, как это сделать с помощью 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, то он печатает то, что вы хотите, в строке ниже.