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

کمک و پشتیبانی => انجمن عمومی => نویسنده: Ma$oud در 20 اسفند 1394، 10:07 ق‌ظ

عنوان: فیلتر کردن یک فایل متنی (حل شد)
ارسال شده توسط: Ma$oud در 20 اسفند 1394، 10:07 ق‌ظ
سلام دوستان، با چه دستوری میشه مثلا کلمه های موجود توی تگ اچتمل رو کشید بیرون؟ :o
مثال:
<p>hello</p>
<p>hey</p>
<p>masoud</p>
<p>Ma$oud</p>
<p>!!!&</p>
بعد خروجی یه همچین چیزی بشه:
hello
hey
masoud
Ma$oud
!!!&
عنوان: پاسخ : فیلتر کردن یک فایل متنی
ارسال شده توسط: علیرضاامیرصمیمی در 20 اسفند 1394، 10:51 ق‌ظ
راه های مختلفی براش هست
فرض کن محتویات رو در یه فایل به نام a.txt
ذخیره کردی . یه دفعه تگ های سمت راست رو حذف کن و یه دفعه سمت چپ

sed -i 's/<\/p>//g' a.txt
 sed -i 's/<p>//g' a.txt

اینجوری خروجی روی همون فایل ذخیره میشه
عنوان: پاسخ : فیلتر کردن یک فایل متنی
ارسال شده توسط: Ma$oud در 20 اسفند 1394، 11:19 ق‌ظ
راه های مختلفی براش هست
فرض کن محتویات رو در یه فایل به نام a.txt
ذخیره کردی . یه دفعه تگ های سمت راست رو حذف کن و یه دفعه سمت چپ

sed -i 's/<\/p>//g' a.txt
 sed -i 's/<p>//g' a.txt

اینجوری خروجی روی همون فایل ذخیره میشه
این در صورتیه که فقط بخوایم تگ <p> رو حذف کنیم، حالا اگه مثلا بخوام از یه فایل اچتمل که همه جور تگ توش هست اطلاعاتو بکشم بیرون چی؟
یه دستوری که بگه مثلا فقط کلماتی که اولشون برای مثال: "> و آخرشون </a رو نشون بده   ;D
عنوان: پاسخ : فیلتر کردن یک فایل متنی
ارسال شده توسط: koosha در 20 اسفند 1394، 11:22 ق‌ظ
با تشکر از دوست عزیزمون .
با پایتون هم اینجوری میشه (البته یکمی طولانی شد) :
import re
import string

f=raw_input('Enter the full address of file : ')

file=open(f,'r')
a=file.read()
file.close()

result = re.findall(r'>.*<',a)

result=string.join(result)

result = re.sub(r'[<|>]','',result)

result=string.split(result)

s=len(result)

for i in range(s)  : print result[i] ;


عنوان: پاسخ : فیلتر کردن یک فایل متنی
ارسال شده توسط: Ma$oud در 20 اسفند 1394، 11:36 ق‌ظ
ممنون آقا کوشا، فقط از اونجایی که من تقریبا اصلا پایتون بلد نیستم  ;D این قسمت <p> و </p> رو به صورت یه متغیری چیزی که من بتونم عوضش کنم درستش کنی؟ و اون قسمت متن رو بشه آدرس فایلو داد؟
عنوان: پاسخ : فیلتر کردن یک فایل متنی
ارسال شده توسط: koosha در 20 اسفند 1394، 11:46 ق‌ظ
کد بالا رو ویرایش کردم تا بتونید آدرس فایل رو بهش بدید .
عنوان: پاسخ : فیلتر کردن یک فایل متنی
ارسال شده توسط: Droid در 20 اسفند 1394، 12:31 ب‌ظ
یه regex (https://regex101.com/r/yO6lP1/1) نوشتم ولی نمیدونم چرا با sed جواب نمیده، کسی نمیدونه چرا؟
ولی اینی که پیدا کردم کار میکنه:
sed -i -e 's/<[^>]*>//g' html.txt
عنوان: پاسخ : فیلتر کردن یک فایل متنی
ارسال شده توسط: احسان فعالپور در 20 اسفند 1394، 01:20 ب‌ظ
این رجکسی که شما نوشتی کل خط رو شامل میشه به همین خاطر چیزی باقی نمیمونه.
شما نوشتی:
sed -r 's/<\/*.+?>//g' htmlاون کاراکتر . رجکستون رو خراب کرده اینجا، درسته که سعی کردید مشکل حریص بودن رجکس رو با ?+ حل کنید ولی خب کاراکتر . میتونه شامل < هم بشه و اینجا به مشکل میخورید.

بهترین کار استفاده از کتابخانه bs4 در پایتون هستش، اما به هر حال رجکس درست همونطور هم که خودتون اشاره کردید این هستش:

ehsan@ehsan-SVF152190X:~/Desktop/scripting/tmp$ cat html
<p>hello</p>
<p>hey</p>
<p>masoud</p>
<p>Ma$oud</p>
<p>!!!&</p>
ehsan@ehsan-SVF152190X:~/Desktop/scripting/tmp$ sed -r 's/<[^>]+>//g' html
hello
hey
masoud
Ma$oud
!!!&