2017-01-17 3 views
0

Я пытаюсь изменить определенный файл на моей машине Linux в скрипте. Файл - файл /etc/pam.d/login. Вопрос заключается в том, что содержимое файла являютсяКомментирование строки в файле в скрипте bash

# Prints the message of the day upon succesful login. 
# (Replaces the `MOTD_FILE' option in login.defs) 
# This includes a dynamically generated part from /run/motd.dynamic 
# and a static (admin-editable) part from /etc/motd. 
session optional pam_motd.so motd=/run/motd.dynamic noupdate 
session optional pam_motd.so 

И мне нужно закомментировать второй сессии строку в этом файле, но когда я иду в строку соответствия результат выглядит следующим образом (я использую SED сделать поэтому для тех, кто заинтересован).

# Prints the message of the day upon succesful login. 
# (Replaces the `MOTD_FILE' option in login.defs) 
# This includes a dynamically generated part from /run/motd.dynamic 
# and a static (admin-editable) part from /etc/motd. 
#session optional pam_motd.so motd=/run/motd.dynamic noupdate 
#session optional pam_motd.so 

Потому что первая строка соответствует этому состоянию. Как бы я удостоверился, что вся строка соответствует «session optional pam_motd.so», а не только определенной ее части.

Спасибо!

ответ

1

Вы должны использовать начало строки (^) и конец строки ($) в своем регулярном выражении. Нравится:

sed -i '/^session optional pam_motd.so$/s/^/#/' /path/to/file 
1

Использование ^ и $ анкеры, чтобы ограничить матч:

sed 's/\(^session optional pam_motd.so$\)/#\1/' file > file.new 
Смежные вопросы