0
我有这个文件httpd.conf
,我想找到EnableSendfile
,而不是包含字符串的行,但该行开始以“#”(没有注释行),如果发现我想将其值重置为关闭。查找和替换在文件或字符串在bash
我试图想出这个。 (我是bash语言的新手) 但它不工作。
我想在我的搜索和替换命令中使用变量,因为我稍后将使用数组项来循环键和它们的值,因此我需要使用变量而不是纯字符串。
感谢您的帮助,提前!
#!/bin/bash
SEARCH="EnableSendfile"
FILEPATH="/root/scripts/httpd.conf"
REPLACE="off"
if grep -Fq $SEARCH $FILEPATH
then
line_string=`sed -n '/^EnableSendfile/p' $FILEPATH`
result_string="${line_string/(^[^#]\w*)(?:\s(\w+))?$/$REPLACE}"
echo $result_string
else
echo "not found"
fi
#
# EnableMMAP and EnableSendfile: On systems that support it,
# memory-mapping or the sendfile syscall may be used to deliver
# files. This usually improves server performance, but must
# be turned off when serving from networked-mounted
# filesystems or if support for these functions is otherwise
# broken on your system.
# Defaults if commented: EnableMMAP On, EnableSendfile Off
#
#EnableMMAP off
EnableSendfile on
#EnableSendfile on
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
hhow我可以使用变量与sed,sinc我打算稍后使用数组项来循环键和它们的值,因此我需要使用变量而不是普通字符串 – Vagho
如果变量从不包含特殊字符,你可以在双引号中使用它们:'“/关键字/ $关键字/”'。否则,你需要一个更复杂的解决方案。 – choroba
好的.i能够做到这一点,但显然它不是保存它只是在屏幕上显示文件,如何保存或替换原始文件? – Vagho