Так как стандартные AIX sed и awk не предлагают редактирование на месте, вы можете рассмотреть предшественник sed
, ed! Это сценарий и редактирование файлов на месте, если вам нравится такой вид вещь:
ed -s /tmp/tcpip << 'EOF'
/start \/usr\/lib\/sendmail "$src_running"/s/^/# /
w
q
EOF
Это вызывает ed
для / tmp / tcpip с опцией -s
, которая подавляет обычный отчет о количестве прочитанных и записанных байтов. Затем он отправляет ed
a quoted here-документ, содержащий список команд. Я сделал цитируемый здесь документ, чтобы предотвратить любую непреднамеренную интерпретацию переменных, таких как $src_running
.
Единственная интересная команда ed
- это первая; Его цель - найти нужную нам строку и затем закомментировать ее. Последние две строки просто w
записывают файл обратно на диск и q
редактируют. Основная команда существует в двух частях:
- адрес, указанный в диапазоне поиска
/start \/usr\/lib\/sendmail "$src_running"/
, и
- действие, которое является поиском и заменой
s/^/# /
Диапазон поиска выглядит немного забавно, поскольку косые черты являются разделителем, поэтому нам нужно избегать косых черт, являющихся частью текста поиска. Поиск и замена просто говорит, что нужно заменить начало строки (специальный токен ^
) на хэш-знак и пробел.
Обратите внимание, что это прямо отвечает на ваш вопрос о нахождении (первого) соответствия для этого текста; он не заменяет всех соответствующих строк. Также, как написано выше, не волнует, закомментирована ли эта строка в данный момент. Двойное комментирование строки ничего не повредит, но если вы хотите быть более строгим в поиске, вы можете использовать:
ed -s /tmp/tcpip << 'EOF'
/^[^#]*start \/usr\/lib\/sendmail "$src_running"/s/^/# /
w
q
EOF
Разница в том, что мы требуем, чтобы запрос снова был привязан к началу строки (^
), а затем следовали ноль или более (*
) символов, которые не #
(с [^#]
).