Unix Shell Bash 'One-Liner' لعزل جميع الأقواس التي تحتوي على عنوان URL الذي يتضمن ".mp3"
-
25-09-2019 - |
سؤال
أنا جديد تمامًا على هذه الأشياء 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
الإصدارات.