我试图在脚本中修改我的linux机器上的某个文件。该文件是/etc/pam.d/login文件。问题是文件的内容是,
# 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
因为第一行也符合条件。我如何确保整行匹配"会话可选pam_motd.so"而不只是它的某个部分。
谢谢!
答案 0 :(得分:7)
您需要在正则表达式中使用行开头(^
)和行结束($
)。像:
sed -i '/^session optional pam_motd.so$/s/^/#/' /path/to/file
答案 1 :(得分:1)
使用^
和$
锚来限制您的匹配:
sed 's/\(^session optional pam_motd.so$\)/#\1/' file > file.new