m個の行部分をn個の行部分に置き換えるには?

m個の行部分をn個の行部分に置き換えるには?

次のような「test」ファイルがあります。

RewiteEngine On
RewriteCond   %{REMOTE_ADDR}   !^192\.168\.1\.7$  [NC]
RewriteCond   %{REMOTE_ADDR}   !^192\.168\.1\.8$  [NC]
RewriteCond   %{REMOTE_ADDR}   !^192\.168\.1\.9$  [NC]
RewriteCond   %{REMOTE_ADDR}   ^192\.168\.1\.5$  [NC]
</Directory>

交換したい場合は\.1\.7次のとおり\.1\.8です。\.1\.9\.1\.10

RewiteEngine On
RewriteCond   %{REMOTE_ADDR}   !^192\.168\.1\.10$  [NC]
RewriteCond   %{REMOTE_ADDR}   ^192\.168\.1\.5$  [NC]
</Directory>

m「IPS」をn「IPS」に置き換えることもできます。どうすればこれを達成できますか?

ベストアンサー1

一方perl通行:

$ perl -ple 's/\\\.1\\\.(7|8|9)/\\.1\\.10/' file | uniq
RewiteEngine On
RewriteCond   %{REMOTE_ADDR}   !^192\.168\.1\.10$  [NC]
RewriteCond   %{REMOTE_ADDR}   ^192\.168\.1\.5$  [NC]
</Directory>

その場で編集するには、以下を試してください。

perl -i.bak -nle 'next if $count and /!\^/;s/\\\.1\\\.(7|8|9)/\\.1\\.10/ and $count++ if /!\^/;print' file

おすすめ記事