Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl-oneliner正则表达式_Perl - Fatal编程技术网

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'