Linux
如何在匹配和替換文本後 grep 7 行?
我在匹配後嘗試 grep 7 行並替換這 7 行中的上下文並將其保存在同一個文件中。
例如:
<IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule>
我想用 替換 的
MaxRequestsPerChild
值5000
。我嘗試過:
grep "IfModule prefork.c" httpd.conf -A7 | /bin/sed -nE "/\bMaxRequestsPerChild\b/ s/[0-9]+/50/"
但沒有運氣。
這是一個 SED 解決方案。
sed '/<IfModule prefork.c>/,/MaxRequestsPerChild/s/MaxRequestsPerChild.*/MaxRequestsPerChild 5000/' apacheconf
它通過匹配模組名稱然後用 5000 值替換下一個“MaxRequestsPerChild”行來工作。它將忽略所有其他模組的“MaxRequestsPerChild”。
使用 GNU sed(不確定語法/功能是否適用於其他版本)
在匹配行後 6 行內更改:
sed -E '/IfModule prefork\.c/{N;N;N;N;N;N;s/(MaxRequestsPerChild +)[0-9]+/\15000/}'
在這裡,
N
將向模式空間添加一個換行符,然後將下一行輸入附加到模式空間如果它總是第 6 行:
sed -E '/IfModule prefork\.c/{n;n;n;n;n;n;s/[0-9]+/5000/}'
這裡
n
將用下一行輸入替換模式空間或者,使用相對定址的更簡單的語法
sed -E '/IfModule prefork\.c/,+6 s/(MaxRequestsPerChild +)[0-9]+/\15000/'