grep命令替换Fedora上httpd.conf文件中的多行文本
我是shell脚本和Linux环境的新手 在我的项目中,我试图从httpd.conf文件中搜索以下文本grep命令替换Fedora上httpd.conf文件中的多行文本,grep,fedora,multiline,httpd.conf,Grep,Fedora,Multiline,Httpd.conf,我是shell脚本和Linux环境的新手 在我的项目中,我试图从httpd.conf文件中搜索以下文本 <Directory '/somedir/someinnerdir'> AllowOverride All </Directory> 允许超越所有 然后删除此文本并再次重写相同的文本。 进行此重写的原因是,该脚本将在首次安装web应用程序时运行,但它可能会在一段时间后再次运行,因为此shell脚本的其他部分也在执行其他任务。因此,这段文字第一次不会被发现,只会被写
<Directory '/somedir/someinnerdir'>
AllowOverride All
</Directory>
允许超越所有
然后删除此文本并再次重写相同的文本。
进行此重写的原因是,该脚本将在首次安装web应用程序时运行,但它可能会在一段时间后再次运行,因为此shell脚本的其他部分也在执行其他任务。因此,这段文字第一次不会被发现,只会被写入,但稍后当脚本运行时,这段文字会被发现,需要删除并再次写入
因此,我试图实现这一目标的脚本部分如下所示:
grep -ve "<Directory '/somedir/someinnerdir'>\\nAllowOverride All\\n</Directory>" /etc/httpd/conf/httpd.conf > tmp_direct
echo -e "<Directory '/somedir/someinnerdir'>\\nAllowOverride All\\n</Directory>" >> tmp_direct
mv tmp_direct /etc/httpd/conf/httpd.conf
grep-ve“\\nAllowOverride All\\n”/etc/httpd/conf/httpd.conf>tmp\u direct
echo-e“\\n所有远程覆盖\\n”>>tmp\U直接
mv tmp_direct/etc/httpd/conf/httpd.conf
我目前没有代码,因此上面可能有一些语法错误,但逻辑/编码是相同的
由于grep命令不支持多行搜索,上面的代码片段无法实现我想要实现的功能
我的操作系统是Fedora8
你能不能在这段代码中提出一些建议,以达到所需的目的,或者可能是其他的选择
我们将非常感谢您在这方面提供的任何帮助
提前谢谢
谢谢你的回复 对不起,前面的错误代码。现在更正了 Charlie和i-moan,由于可操作性限制,我无法实现sed或perl,因为它需要添加到我们将分发此项目的环境中 史蒂夫,我要检查多行。我没有把它放在代码块中,所以它删除了目录标签( 所以我需要找到其他的出路 再次感谢
致以最诚挚的问候。如果您想确保匹配的是整行,您可以执行以下操作: grep-v“^AllowOverride All$” ^匹配行首,$匹配行尾
这有帮助吗?我不太清楚你想用grep做什么。这听起来像是sed(1)的工作。你想要的将非常接近
sed -i.bak -e '/AllowOverride All/i# ' file
注释掉该行(记住httpd.conf有注释),后跟
sed -i.bak -e 's/# AllowOverride All/AllowOverride All ' file
把它推回
警告我还没有试过,您想阅读手册页并自己测试。我不确定我是否理解这个问题。 如果我错了,请纠正我,但您试图在第一次运行脚本时将“AllowOverride All”添加到httpd.conf。如果是,您希望启用它吗 然后在第二遍时,您可能希望启用/禁用该命令 如果我没记错的话,“AllowOverride”只允许在
希望这对我有帮助。抱歉,提交了上一篇没有代码块的文章。所以它删除了目录标签。请找到正确的邮政编码。