首页 > 解决方案 > 如何在 bash 中注释掉代码行?

问题描述

我需要在 apache 配置中注释掉 3 行:

    RewriteEngine On
    #RewriteBase /wordpress/
    RewriteRule ^index\.php$ - [S=1]
    #RewriteCond %{REQUEST_FILENAME} !-f    <- 
    #RewriteCond %{REQUEST_FILENAME} !-d    <- 
    #RewriteRule . index.php [L]            <- 

1000台机器。

对于所有这些机器,如何通过 ssh 使用 bash 命令注释掉最后 3 行?

样本输入

    RewriteEngine On
    #RewriteBase /wordpress/
    RewriteRule ^index\.php$ - [S=1]
    RewriteCond %{REQUEST_FILENAME} !-f    <- 
    RewriteCond %{REQUEST_FILENAME} !-d    <- 
    RewriteRule . index.php [L]            <- 

样本输出

    RewriteEngine On
    #RewriteBase /wordpress/
    RewriteRule ^index\.php$ - [S=1]
    #RewriteCond %{REQUEST_FILENAME} !-f    <- 
    #RewriteCond %{REQUEST_FILENAME} !-d    <- 
    #RewriteRule . index.php [L]            <- 

标签: bash

解决方案


如果您想注释每个文件的最后三行,您可能应该使用ed

ed file <<END
$;#
-2;#
s/[^[:blank:]]/#&/
+s
+s
wq
END

演示:

#!/bin/sh
f=$(mktemp)

trap 'rm "$f"' EXIT

cat >"$f"  <<END
    RewriteEngine On
    #RewriteBase /wordpress/
    RewriteRule ^index\.php$ - [S=1]
    RewriteCond %{REQUEST_FILENAME} !-f    <- 
    RewriteCond %{REQUEST_FILENAME} !-d    <- 
    RewriteRule . index.php [L]            <- 
END

ed "$f" <<END >/dev/null
$;#
-2;#
s/[^[:blank:]]/#&/
+s
+s
wq
END

cat "$f"

输出:

    RewriteEngine On
    #RewriteBase /wordpress/
    RewriteRule ^index\.php$ - [S=1]
    #RewriteCond %{REQUEST_FILENAME} !-f    <- 
    #RewriteCond %{REQUEST_FILENAME} !-d    <- 
    #RewriteRule . index.php [L]            <-

推荐阅读