Unix shell bash 'one-liner', чтобы изолировать все круглые скобки, содержащие URL, который включает ".mp3" - PullRequest
2 голосов
/ 09 декабря 2010

Я совершенно новичок в этом Unix bash - и первый вопрос здесь! Надеюсь, вы, ребята, можете помочь:)

Проблема:

У меня есть масса грязного веб-исходного кода (упаковка / неформатированная), содержащая несколько вхождений:

( 'http://www.example.com/path/audio.mp3')

Не могли бы вы помочь с однострочником (sed / awk ...), который изолирует эти вхождения круглых скобок, содержащих URL, который включает в себя ".mp3" , чистый начальный / конечный " ()"и" ' "символов, а затем распечатайте в виде списка (по одному на строку) в активный файл .txt.

Примечание: Однострочник будет использоваться в Automator на Mac в качестве службы / рабочего процесса для действия над «выделенным текстом».

Любая помощь будет принята с благодарностью, поскольку (несмотря на то, что я просматриваю все онлайн-статьи), я полностью потерян.

С наилучшими пожеланиями,

Dave

Ответы [ 5 ]

4 голосов
/ 09 декабря 2010

Использование egrep с -o (выводить только совпадающие части) должно помочь. Попробуйте что-то вроде этого:

egrep -o "http://[^'\"]+.mp3" FILENAME
0 голосов
/ 10 декабря 2010

Это будет соответствовать URL-адресам, которые указаны в скобках и одинарных кавычках:

grep -Po "(?<=\(')http.*?mp3(?='\))"

URL-адреса выводятся по одному на строку без скобок и одинарных кавычек.Опция -P для Perl-совместимых регулярных выражений доступна (как минимум) в версиях GNU и OS X grep.

0 голосов
/ 09 декабря 2010

PERL, который должен иметь Mac.

#!/usr/bin/perl
while(<STDIN>)
{
    $_ =~ /.*(http:\/\/.*\.mp3).*/;
    print $1 . '\n';
}
0 голосов
/ 09 декабря 2010

Попробуйте уточнить следующее:

perl -ne $'while(/\(\'(http:\/\/[\w.\/]+?\.mp3)\'\)/g) { print "$1\n"; }' < input_file > output_file

Он читает stdin (здесь: input_file) по одной строке за раз, ищет каждое вхождение «url» в этой строке и печатает его в стандартный вывод (здесь: output_file) без (' и * 1007. *.

0 голосов
/ 09 декабря 2010

awk '{print $2}' FS="('|')" < filename

cat filename | tr ')' '\n' | awk '{print $2}' FS="('|')" > output.txt

Просто замените filename именем вашего файла, содержащего эти строки ..

OR

echo "your multiline\
text here" | tr ')' '\n' | awk '{print $2}' FS="('|')"

ПРОСТО ПОПРОБУЙТЕ:

tr ')' '\n' | awk '{print $2}' FS="('|')"

...