文字ペア間の文字列の置換

文字ペア間の文字列の置換

sites.txt以下に示すように、長いURLを含む動的サイトを含むファイルがあります。

http://onesite.com/a.php?one=1&two=2&three=3
http://anothersite.com/b.php?one=1&two=2    
http://aaaandanothersite.com/a.php?one=1&two=2&three=3&four=4

すべてのパラメータ値を削除する必要がありますが、出力は次のとおりです。

http://onesite.com/a.php?one=&two=&three=    
http://anothersite.com/b.php?one=&two=    
http://aaaandanothersite.com/a.php?one=&two=&three=&four=

正規表現やショートカットがあれば聞きたいです。ただし、このように1行で処理できない場合、そのサイトはすでにfor関数にあるため、1行ずつ処理することもできます。

答え1

使用sed:

sed -E 's/=[^&]*(&|$)/=\1/g' sites.txt

置換=の後には任意の文字(\newlineを除く)が続きますが、行末()&(0または導関数)で終わる文字はありません。[^&]*&|$(&|$)そしてJust=とキャプチャされたグループ(&|$)とその\1逆参照を文字として返す&か、これが最後の引数であることを示す何も返しません。

答え2

Perlでは、次のように実行できます。

perl -ple 's/=[^&=]*/=/g' sites.txt

どこ:

  • perl -ple exp等しい終端子を持たない行ごとに print(exp(line))

関連情報