Linux

如何在匹配和替換文本後 grep 7 行?

  • April 17, 2019

我在匹配後嘗試 grep 7 行並替換這 7 行中的上下文並將其保存在同一個文件中。

例如:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

我想用 替換 的MaxRequestsPerChild5000

我嘗試過:

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/'

引用自:https://unix.stackexchange.com/questions/451053