我需要在多個檔案中進行查找/替換,但我想保留匹配項的第一次出現并替換所有其他檔案。這可能已經在其他地方得到了回答,但搜索起來有點困難。
我目前正在使用: perl -pi -w -e 's/THING/SOMETHING_ELSE/g;' ./src/**/*.py
一個實際例子:
from stuff import THING
print(f"use {THING} here")
print(f"use {THING} there")
print(f"use {THING} everywhere")
應該變成:
from stuff import THING
print(f"use {SOMETHING_ELSE} here")
print(f"use {SOMETHING_ELSE} there")
print(f"use {SOMETHING_ELSE} everywhere")
uj5u.com熱心網友回復:
你必須檢查/THING/做之前s/THING/.../。
這是作為腳本的方式thing-to-other,然后您可以將其稱為thing-to-other ./src/**/*.py
#!/bin/env perl -i -p
if ( /THING/ ) {
if ( $seen{$ARGV} ) {
s/THING/SOMETHING_ELSE/g;
}
}
請注意,我擺脫了 ,-w因為使用%seen散列會引發警告。該%seen散列跟蹤有多少在每個輸入檔案的時間($ARGV你)看到/MATCH/。
如果你真的需要它是一個單線:
perl -i -p -e'if (/THING/) {if($seen{$ARGV} ){s/THING/SOMETHING_ELSE/g}}'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/371908.html
標籤:perl
