#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
операции на отдельные команды и делать то, что говорит Джон после каждой.