انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید




نویسنده موضوع: چطور می‌توان بعد از grep نتیجه را مرتب و ۳ جمله بعد و قبل آن را نمایش داد؟  (دفعات بازدید: 788 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین jackbil

  • Jr. Member
  • *
  • ارسال: 71
با سلام
میخواستم اگر کسی میتونه به بنده کمک کنه که این کد کمی گسترش پیدا کنه.
بلکه استفاده ای برای بنده و آموزشی برای دیگران به همراه داشته باشه.
#!/usr/bin/env bash

find . -iname "*.srt" | while read -r "fn"; do


grep -iH "can" "$fn"
   

done

برای مثال یه خروجی مرتب بده - توی ترمینال مرتب باشه برای مرور و توی نایل تکست هم به صورت مرتب نتیجه ذخیره بشه.

برای مثال

bonny and clyde
---------------
result n1
how are you today?
i'm fine thank you.
------------------
time : 1.08.32
------------------

result n2
how are you today?
i'm fine thank you.
------------------
time : 1.08.32
------------------

result n3
how are you today?
i'm fine thank you.
------------------
time : 1.08.32
------------------

یا اگر مرتب تر هم بشه بهتر - یا اگر خود شما هم چیزی سراغ دارید خیلی خوبه - فقط توجه کنید که دیگه وجود ویدیو الزامی نیست - تایم برای یه وقت کمکی - آیا امکانش وجود داره مثلا قسمت تایم بصورت یه لینک بشه که وقتی روش کلیک کنیم ویدیو پلیر از اونجای فیلم شروع به پخش کنه؟؟؟

آفلاین 藤沼

  • Sr. Member
  • *
  • ارسال: 414
  • جنسیت : پسر
فکر کنم دستورهای زیر کارت رو راه بندازند. فقط منظورت رو از مرتب کردن چیه؟ بر چه اساسی مرتب بشند؟
find . -iname "*.srt" | while read -r "fn"; while do
    grep -i -B 3 "$fn"
done

آفلاین 藤沼

  • Sr. Member
  • *
  • ارسال: 414
  • جنسیت : پسر
ایدهٔ جالبی که دربارهٔ پخش ویدیو برابر کلمهٔ پیدا شده طرح کردی رو من نوشتم (:

۱-یک فایل SRT رو بخون (python)
۲-زمانبندی الگوی موردنظر رو پیدا کن (python)
۳-زایدها رو از بین ببر (sed)
۴-هربار ویدیو رو در زمان آغاز و پایان مشخص پخش کن (bash)

اسکریپت بش برای اجرای ویدیو با پخش‌کننده mpv (با mplayer فقط ss- درست کار می‌کنه):
#!/usr/bin/env bash
# filename: video_seeker.sh

readonly filename="$1"
while read -r "str"; do
    timecode=(${str//,/ })
    mpv --start="${timecode[0]}" --end="${timecode[1]}" "$filename" >/dev/null 2>&1
done

اکسریپت پایتون برای تجزیه فایل‌های SRT و جستجوی با استفاده از عبارت‌های باقاعده:
#!/usr/bin/env python3
# filename: srt_grep.py

import sys
import re
from srt import parse as srt_parse
from srt import Subtitle
from datetime import timedelta


class NoSubtitle(Subtitle):
    TD = timedelta(seconds=0)

    def __init__(self):
        return super().__init__(-1, self.TD, self.TD, '')


def srt_open(filename):
    try:
        return srt_parse(open(filename).read())
    except FileNotFoundError:
        print("We couldn't find '{}'".format(filename))
    except PermissionError:
        print("You don't seem to have the rights to do that")
    except:
        print('An error undefined has occurred')
    return [NoSubtitle()]


def srt_search(pattern, subtitle):
    if re.search(pattern, subtitle.content, re.IGNORECASE):
        return subtitle
    else:
        return NoSubtitle()


def srt_format(subtitle):
    if subtitle.start.seconds == 0:
        return '<no match>'
    else:
        return "{},{}".format(subtitle.start, subtitle.end)


if __name__ == '__main__':
    filename = str(sys.argv[2])
    pattern = str(sys.argv[1])

    for subtitle in srt_open(filename):
        print(srt_format(srt_search(pattern, subtitle)))

روش استفاده:
$ ./srt_grep.py 'butterfly effect' 'mr_nobody.srt' | sed '/<no match>/d' | ./video_seeker.sh 'mr_nobody.mkv'
« آخرین ویرایش: 05 تیر 1395، 01:05 ب‌ظ توسط 藤沼 »

آفلاین jackbil

  • Jr. Member
  • *
  • ارسال: 71
کد اول ارور میده که
./script.sh: line 1: syntax error near unexpected token `do'
./script.sh: line 1: `find . -iname "*.srt" | while read -r "fn"; while do'


کد دوم رو هنوز تست نکردم

آفلاین jackbil

  • Jr. Member
  • *
  • ارسال: 71
کد دوم این ارور رو میده

./srt_grep.py 'bear' 'ted.srt' | sed '/<no match>/d' | ./video_seeker.sh 'ted.mkv'
Traceback (most recent call last):
  File "./srt_grep.py", line 6, in <module>
    from srt import parse as srt_parse
ImportError: No module named 'srt'


آفلاین 藤沼

  • Sr. Member
  • *
  • ارسال: 414
  • جنسیت : پسر
pip install srt(البته اگر دستور بالا رو بدون sudo اجرا کنید عمل نمی‌کند بنابراین پیشنهاد می‌شود از virtualenv استفاده کنید و بعد از ساخت یک محیط مجازی ماجول موردنظر رو نصب و اسکریپت رو اجرا کنید)
sudo apt install python3-virtualenv
virtualenv-3.4 env
source .env/bin/activate
pip install srt