Perl-oneliner正则表达式
我已经在线创建了这个正则表达式脚本,以从字符串中去掉括号Perl-oneliner正则表达式,perl,Perl,我已经在线创建了这个正则表达式脚本,以从字符串中去掉括号[/apache/20160419/20160419-0643/20160419-064309-vxylvx8aaaeaabumdliaaag] 我想知道是否可以在shell上以“perl oneliner”的形式运行它 我试过了 cat file | perl -wnE'say /((?:\\/[\\w\\.\\-]+)+)/g' Unmatched ( in regex; marked by <-- HERE in m/(( &l
[/apache/20160419/20160419-0643/20160419-064309-vxylvx8aaaeaabumdliaaag]
我想知道是否可以在shell上以“perl oneliner”的形式运行它
我试过了
cat file | perl -wnE'say /((?:\\/[\\w\\.\\-]+)+)/g'
Unmatched ( in regex; marked by <-- HERE in m/(( <-- HERE ?:\\/ at -e line
cat文件| perl-wnE'say/((?:\\/[\\w\\.\\-]+)+)/g'
Unmatched(在regex中;标记为我不确定您想要什么,但这将从命令行提供的字符串中删除所有方括号
$ perl -E "say shift =~ tr/[]//dr" [/apache/20160419/20160419-0643/20160419-064309-VxYLvX8AAAEAABumDlIAAAAG]
/apache/20160419/20160419-0643/20160419-064309-VxYLvX8AAAEAABumDlIAAAAG
或者,这将打印非方括号的第一个字符序列,并给出与此数据相同的结果
$ perl -E "say shift =~ / ( [^\[\]]+ ) /x" [/apache/20160419/20160419-0643/20160419-064309-VxYLvX8AAAEAABumDlIAAAAG]
/apache/20160419/20160419-0643/20160419-064309-VxYLvX8AAAEAABumDlIAAAAG
似乎太复杂了,相当于:
$txt =~ s/(^\[|\]$)//g;
或者,如果将整个URL作为一行输入:
perl -ne 'print m/\[([^]]+)\]/;'
您可以使用sed
,但perl也可以:
echo "[foo]" | perl -pe 's/[\[\]]//g'
虽然我不知道你为什么要使用如此复杂的正则表达式来删除大括号。请详细说明你的目的。这是一个非常复杂的方法,看起来非常简单。请说明$txt
中的数据来自何方?请说明你的问题(我不清楚)正如title.Perl一样,oneliner正则表达式不是一个问题。
echo "[foo]" | perl -pe 's/[\[\]]//g'