Сценарии оболочки с использованием sed

#linux #bash #shell

#linux #bash #оболочка

Вопрос:

Пример сценария показан ниже:

 #!/bin/bash
sed -i~ 's/user1/user2/g' myfile.txt
  

Он заменяет user1 на user2 в myfile.txt

Как я могу изменить приведенный выше сценарий, чтобы получить подтверждение того, что сценарий нашел пользователя 1 и заменил его на пользователя 2?

В принципе, если он не находит user1, он должен выдать предупреждающее сообщение в командной строке.

Спасибо!

Комментарии:

1. Вы могли бы sed коснуться файла флага, если он выполняет успешную замену. В качестве оптимизации делайте это только для первого совпадения. Если ваши входные файлы слишком велики для решений grep amp;amp; sed и diff, возможно, стоит собрать воедино несколько более сложный сценарий sed.

Ответ №1:

Альтернативой различению после является grep before:

 grep -q 'user1' myfile.txt amp;amp; sed -i~ 's/user1/user2/g' myfile.txt || echo "user1 not there"
  

Это -q означает, что grep работает тихо и возвращает успех, если найден, поэтому тогда и только тогда он продолжит выполнять замену.

Ответ №2:

Попробуйте diff инструмент:

 fgrep -q 'user1'  myfile.txt 2>amp;1 1>/dev/null
if [ "$?" -eq 0 ]; then
   echo " user1 found."
fi
...
diff -q myfile.txt myfile.txt~ 2>amp;1 1>/dev/null
if [ "$?" -eq 1 ]; then
   echo " Match found amp; Replaced."
fi
  

Комментарии:

1. В моем скрипте есть 5 команд sed, и я действительно хочу проверить, заменяется каждая из этих строк или нет. Как я могу это сделать?

2. @Mike, ты можешь разделить sed операции на отдельные команды и делать то, что говорит Джон после каждой.