2016-04-19 2 views
-2

Я создал этот скрипт регулярных выражений в Интернете, чтобы лишить скобу из строки [/apache/20160419/20160419-0643/20160419-064309-VxYLvX8AAAEAABumDlIAAAAG]Perl Oneliner REGEX

Я интересно, если это возможно, чтобы запустить его на раковине, как «Perl Oneliner»

#!/usr/bin/perl 

# URL that generated this code: 
# http://txt2re.com/index.php3?s=[/apache/20160419/20160419-0643/20160419-064309-VxYLvX8AAAEAABumDlIAAAAG]&2 

$txt='[/apache/20160419/20160419-0643/20160419-064309-VxYLvX8AAAEAABumDlIAAAAG]'; 

$re1='.*?'; # Non-greedy match on filler 
$re2='((?:\\/[\\w\\.\\-]+)+)'; # Unix Path 1 

$re=$re1.$re2; 
if ($txt =~ m/$re/is) 
{ 
    $unixpath1=$1; 
    print $unixpath1; 
} 

Я попытался

cat file | perl -wnE'say /((?:\\/[\\w\\.\\-]+)+)/g' 
Unmatched (in regex; marked by <-- HERE in m/((<-- HERE ?:\\/ at -e line 
+0

Пожалуйста, объясните, что вы после. Это очень сложный подход к тому, что выглядит как действительно простая проблема. – Sobrique

+0

Откуда берутся данные в '$ txt', пожалуйста? – Borodin

+0

Укажите свой вопрос (это не ясно мне) в качестве названия. * Perl oneliner regex * не вопрос. – reinierpost

ответ

2

Вы можете использовать sed, но Perl тоже работает:

echo "[foo]" | perl -pe 's/[\[\]]//g' 

Хотя я не уверен, почему вы хотите использовать такое сложное регулярное выражение просто удалить скобки.

2

Я не уверен, что вы хотите, но это лишит все квадратные скобки из строки, подаваемой на кобальтовой mmand линия

$ 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 
3

Кажется слишком сложным для того, что составляет:

$txt =~ s/(^\[|\]$)//g; 

Или, если кормила весь URL, и как один лайнер:

perl -ne 'print m/\[([^]]+)\]/;' 
Смежные вопросы