2

我对这个 Unix bash 的东西完全陌生——这是第一个问题!希望大家能帮忙:)

问题:

我有大量凌乱的网络源代码(包装/未格式化),其中包含多次出现:

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

您能否提供一个单行 (sed/awk...) 的帮助,它将隔离这些括号的出现,其中包含一个包含 ".mp3"、干净的前导/尾随 " () " 和 " ' " 字符的 URL,然后打印为列表(每行一个)到活动的 .txt 文件。

注意:单行将在 Mac 上的 Automator 中用作服务/工作流程,以对“选定文本”进行操作。

任何帮助将不胜感激(尽管浏览了所有在线 tuts)我完全迷路了。

最好的祝福,

戴夫

4

5 回答 5

4

使用egrepwith -o(仅输出匹配的部分)应该可以解决问题。尝试这样的事情:

egrep -o "http://[^'\"]+.mp3" FILENAME
于 2010-12-09T19:55:46.303 回答
0

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

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

只需替换filename为包含这些行的文件的名称..

或者

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

试一试:

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

于 2010-12-09T19:44:52.107 回答
0

PERL,Mac 应该有的。

#!/usr/bin/perl
while(<STDIN>)
{
    $_ =~ /.*(http:\/\/.*\.mp3).*/;
    print $1 . '\n';
}
于 2010-12-09T19:48:20.177 回答
0

尝试细化以下内容:

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

它一次读取 stdin(此处:)input_file一行,查找该行中每次出现的“url”并将其打印到 stdout(此处:),output_file而不使用('and ')

于 2010-12-09T19:49:25.240 回答
0

这将匹配出现在括号和单引号中的 URL:

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

URL 是输出的,每行一个,不带括号或单引号。Perl 兼容的-P正则表达式选项(至少)在 GNU 和 OS Xgrep版本中可用。

于 2010-12-10T10:13:51.903 回答