有一个名为的文件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=
如果有正则表达式或快捷方式,我喜欢听。但是,如果无法以这种单行方式执行此操作,则站点已经在 for 函数中,因此也可以逐行处理
答案1
使用sed
:
sed -E 's/=[^&]*(&|$)/=\1/g' sites.txt
替换=
后跟任何字符(\n
ewline 除外),但不能是以行尾( )结尾的字符&
(零或微分次数),[^&]*
&
|
$
(&|$)
和只是=
并返回捕获的组(&|$)
及其\1
作为反向引用,该反向引用是&
字符或什么都没有,表明这是最后一个参数。
答案2
使用 Perl,你可以按照以下方式运行一些东西
perl -ple 's/=[^&=]*/=/g' sites.txt
在哪里:
perl -ple exp
相当于对于没有终止符的每一行, print(exp(line))