1, Justin Timberlake, Title 545, Price $7:30
2, Taylor Swift, Title 723, Price $7.90
3, Mick Jagger, Title 610, Price $7.90
4, Lady Gaga, Title 118, Price $7:30
5, Johnny Trash, Title 482, Price $6.50
6, Elvis Presley, Title 335, Price $7:30
7, John Lennon, Title 271, Price $7.90
حالا فرض کنید من میخوام کلمهی Timberlake رو از داخل این متن جدا کنم اما فقط یکی دو حروف از اول و آخرش رو میدونم، منطقا میام این کار رو میکنم:➜ ~ sed -n '/Ti.*ke/p' file
1, Justin Timberlake, Title 545, Price $7:30
sed -n '/Ti.*ke/p' <file> | grep -o Ti.*ke
در مورد sed زیاد بلد نیستم و با جستجویی که کردم چیزی گیرم نیومد.
ولی تا اونجایی که الان دیدم، فعلا اضافه کردن grep می تونه کارتو راه بندازه:کد: [انتخاب]sed -n '/Ti.*ke/p' <file> | grep -o Ti.*ke
$ grep -o Ti.*ke <file>
همین دستوری که با grep نوشتی کل کار رو انجام میده دیگه! چرا اولش sed گذاشتی؟آره همینطوره. به این دقت نکرده بودم!کد: [انتخاب]$ grep -o Ti.*ke <file>
sed -nr 's/.*(Ti.*ke).*/\1/p' file
فقط یه سوال دیگه برام پیش اومده ;Dببین این کمک می کنه:
من میخواستم اگر مقداری که رجکس بهش اشاره میکنه، چندین بار هم در کل فایل اومده بود فقط اولیشو برگردونه که با راهکاری که @ M!lad ارائه دادن این کار رو انجام دادم.
حالا سوالم اینه که با grep هم میشه این کار رو کرد؟
grep -o <string> <file> | head -1
awk -F, '$2~/Timber/ {print $2; exit;}'
grep -Pio -m 1 'tim.*?ke'
grep -Pio -m 1 'tim.*?ke' file | head -1
grep -Pnio 'tim.*?ke' file | uniq | cut -f2 -d: