Unix Shell Bash 'One-Liner' لعزل جميع الأقواس التي تحتوي على عنوان URL الذي يتضمن ".mp3"

StackOverflow https://stackoverflow.com/questions/4402342

سؤال

أنا جديد تمامًا على هذه الأشياء Unix Bash - والسؤال الأول هنا! أتمنى أن تساعدكم يا رفاق :)

مشكلة:

لدي كتلة من رمز مصدر الويب الفوضوي (التفاف/غير مهتم) يحتوي على حوادث متعددة من:

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

هل يمكن أن تساعد مع خط واحد (SED/AWK ...) من شأنه أن يعزل حوادث هذه الحوادث أقواس يحتوي على عنوان URL يتضمن ".mp3", ، تنظيف الرائدة/المتخلف "()" و " ' "الأحرف ، ثم طباعة كقائمة (واحدة لكل سطر) إلى ملف .txt نشط.

ملحوظة: سيتم استخدام خط واحد في Automator على Mac كخدمة/سير عمل للعمل على "النص المحدد".

أي مساعدة سيكون موضع تقدير كبير كما (على الرغم من الصيد عبر جميع التوتات عبر الإنترنت) أنا ضائع تمامًا.

مع أطيب التحيات،

ديف

هل كانت مفيدة؟

المحلول

استخدام egrep مع -o (إخراج الأجزاء فقط التي تتطابق) يجب أن تقوم بالخدعة. جرب شيئًا كهذا:

egrep -o "http://[^'\"]+.mp3" FILENAME

نصائح أخرى

بيرل ، الذي يجب أن يكون Mac.

#!/usr/bin/perl
while(<STDIN>)
{
    $_ =~ /.*(http:\/\/.*\.mp3).*/;
    print $1 . '\n';
}

حاول تحسين ما يلي:

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

قرأت stdin (هنا: input_file) سطر واحد في وقت واحد ، يبحث عن كل حدوث "عنوان URL" في هذا الخط وطباعته إلى stdout (هنا: output_file) بدون (' و ').

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="('|')"

سيتطابق هذا

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

عناوين URL هي الإخراج ، واحد لكل سطر ، بدون أقواس أو عروض أسعار واحدة. ال -P يتوفر خيار التعبيرات العادية المتوافقة مع PERL (على الأقل) في GNU و OS X grep الإصدارات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top