替换字符对之间的字符串

替换字符对之间的字符串

有一个名为的文件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

替换=后跟任何字符(\newline 除外),但不能是以行尾( )结尾的字符&(零或微分次数),[^&]*&|$(&|$)只是=并返回捕获的组(&|$)及其\1作为反向引用,该反向引用是&字符或什么都没有,表明这是最后一个参数。

答案2

使用 Perl,你可以按照以下方式运行一些东西

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

在哪里:

  • perl -ple exp相当于对于没有终止符的每一行, print(exp(line))

相关内容