У меня есть один файл Backup_status.txt, как показано ниже.
x01stestdb1a-10.92.201.111-SUCCESS
x01stestdb2a-10.92.201.112-SUCCESS
x01stestdb3a-10.92.201.113-SUCCESS
Резервные копии работают на всех серверах.
Например, если резервная копия хранится в x01stestdb2a, нам нужно выполнить поиск с именем хоста x01stestdb2a в этом файле и изменить статус на FAIL. Здесь я использую дефис (-) в качестве разделителя.
Помогите мне, как выполнить поиск по этому имени сервера в файле и заменить последний блок с помощью разделителя -.
ПРИМЕЧАНИЕ. Я хочу изменить содержимое файла.
Я пробовал и другие способы, но не получил должных результатов. Если кто знает, пожалуйста, помогите мне ...
Каковы были ваши результаты с sed или ed?
Я пробовал что-то вроде этого, sed -i 's / grep SERVER1 / FAIL / g' Backup_status.txt Но я ничего не понимаю. Пожалуйста, помогите решить эту проблему.
Имеет ли здесь значение разделитель? sed -i '/SERVER1/ s/SUCCESS/FAIL/' Backup_status.txt заменит все SUCCESS на FAIL в строках, содержащих SERVER1.





Попробуй это:
sed -i '/SERVER1/ s/-[^-]*$/-FAIL/' Backup_status.txt
/SERVER1/ позволяет sed выполнить замену в строке, соответствующей SERVER1.
Решение sed предполагает, что SUCCESS / FAIL всегда находится в последнем поле, что может быть неверным. Более общее решение - использовать awk:
awk -i inplace -F'-' '/SERVER1/ {sub($3, "FAIL")}; {print}' Backup_status.txt
-i inplace такой же, как sed -i-F'-' установите разделитель на '-'/SERVER1/ {sub($3, "FAIL")}; замените третье поле строк, содержащих SERVER1, на «FAIL».{print} печатает каждую строку. Для строк, содержащих SERVER1, он напечатает измененную версию, в противном случае он напечатает строку как есть.Фактически эта команда заменяет УСПЕХ на НЕИСПРАВНОСТЬ. Но мое требование - я не знал, что раньше это было УСПЕХ / НЕУДАЧА. Каким бы ни был предыдущий статус, мне нужно заменить его текущим статусом. Вот почему я концентрируюсь на разделителе и пытаюсь заменить третье поле. Надеюсь, вы получили мое требование, если нет, дайте мне знать. Приведу пример. Большое спасибо за твою помощь.
Большое спасибо за ваше время и помощь Уважаемый ... Это работает, как ожидалось.
Я последовал тому же самому, думаю, есть синтаксическая ошибка, братан.
Думаю, мы используем другую версию awk. Моя - GNU Awk 4.2.0. Вы можете приспособить команду к своей версии, но идея та же.
используйте awk, см. stackoverflow.com/tags/awk/info для помощи ... если вы уже что-то пробовали, добавьте это к вопросу, см. meta.stackoverflow.com/questions/261592/…