Автор Тема: изтриване на част от текст  (Прочетена 1734 пъти)

mrowcp

  • Напреднали
  • *****
  • Публикации: 450
    • Профил
Чак ме е срам да пускам нова тема...
Как да изтрия част от дума?Пример:

cat file.txt

Jiveq na 22nd nomer ulica Ivan 2ri.

След промяната да стане:

Jiveq na nd nomer ulica Ivan 2ri.

Дефакто да няма 22 пред nd

EDIT: намерих начин с: cut -c
« Последна редакция: Dec 03, 2010, 09:43 от mrowcp »
Активен

Some Things Just Are The Way They Are

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: изтриване на част от текст
« Отговор #1 -: Dec 03, 2010, 09:56 »
Код
GeSHi (Bash):
  1. cat file | sed "s/\([^a-zA-Z ]*\)//g"
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

mrowcp

  • Напреднали
  • *****
  • Публикации: 450
    • Профил
Re: изтриване на част от текст
« Отговор #2 -: Dec 05, 2010, 11:01 »
Код
GeSHi (Bash):
  1. cat file | sed "s/\([^a-zA-Z ]*\)//g"

И аз гледах някакви примери с sed, но нещо ми е трудно да разчета синтаксиса.Може ли да "преведеш" :) ?
Активен

Some Things Just Are The Way They Are

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: изтриване на част от текст
« Отговор #3 -: Dec 05, 2010, 11:30 »
Код
GeSHi (Bash):
  1. cat file | sed "s/\([^a-zA-Z ]*\)//g"

И аз гледах някакви примери с sed, но нещо ми е трудно да разчета синтаксиса.Може ли да "преведеш" :) ?

[^a-zA-Z ]* - намери всички символи които са различни от a-z, A-Z и " " (интервал) и ги замени с нищо (//g'). /g - глобално заместване на всички символи.
« Последна редакция: Dec 05, 2010, 11:32 от backtolife »
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

mrowcp

  • Напреднали
  • *****
  • Публикации: 450
    • Профил
Re: изтриване на част от текст
« Отговор #4 -: Dec 05, 2010, 12:08 »
Код
GeSHi (Bash):
  1. cat file | sed "s/\([^a-zA-Z ]*\)//g"

И аз гледах някакви примери с sed, но нещо ми е трудно да разчета синтаксиса.Може ли да "преведеш" :) ?

[^a-zA-Z ]* - намери всички символи които са различни от a-z, A-Z и " " (интервал) и ги замени с нищо (//g'). /g - глобално заместване на всички символи.

Добре, но в този случай 2ката в името на улицата също няма да я има.

Jiveq na 22nd nomer ulica Ivan 2ri.
Активен

Some Things Just Are The Way They Are

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: изтриване на част от текст
« Отговор #5 -: Dec 05, 2010, 12:15 »
Аз ти бях отговорил преди да си промениш поста, т.е. искаш да махнеш само 22 само.
Код:
$ echo "Jiveq na 22nd nomer ulica Ivan 2ri." | sed 's/22//g'
Jiveq na nd nomer ulica Ivan 2ri.
- най-тъпото за което се сещам. Обаче не чаткам искаш да махнеш номера на улицата, като всеки ред или запис е с различен ли?
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

mrowcp

  • Напреднали
  • *****
  • Публикации: 450
    • Профил
Re: изтриване на част от текст
« Отговор #6 -: Dec 05, 2010, 12:38 »
Аз ти бях отговорил преди да си промениш поста, т.е. искаш да махнеш само 22 само.
Код:
$ echo "Jiveq na 22nd nomer ulica Ivan 2ri." | sed 's/22//g'
Jiveq na nd nomer ulica Ivan 2ri.
- най-тъпото за което се сещам. Обаче не чаткам искаш да махнеш номера на улицата, като всеки ред или запис е с различен ли?

Ами трябваше ми, защото си играя с един баш скрипт, който прави проверка на правило в ipfw
Лошото е, че при листване на ipfw -> ipfw list , пред номерата на редовете слага нули:

00009
00010
00011
00012
00013
00014
00015

и т.н. Скрипта проверява даденото ИП с какъв номер е записано в ipfw и ако е между 9 и 12 връща един отговор, ако е между 13 и 15 друг.Та когато сравнявам числата с -gt и има нули, сравняването не сработва.

В този ред на мисли се сетих да питам и за: има ли начин да задам проверка на граници?Пример:
в момента реда е по следния начин:

Код
GeSHi (Bash):
  1. if [ "$?" -eq 0 ] && [ $num -gt 09 ] && [ $num -lt 12 ];then

има ли начин да не ползвам и -gt и -lt , а да задам граница 9-12?
« Последна редакция: Dec 05, 2010, 12:42 от mrowcp »
Активен

Some Things Just Are The Way They Are

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: изтриване на част от текст
« Отговор #7 -: Dec 05, 2010, 12:44 »
А ако ги сравняваш с ">" и "<"...
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

mrowcp

  • Напреднали
  • *****
  • Публикации: 450
    • Профил
Re: изтриване на част от текст
« Отговор #8 -: Dec 05, 2010, 12:54 »
А ако ги сравняваш с ">" и "<"...

Предполагам пак ще стане.Просто идеята ми беше дали няма начин за задаване на рейндж :)
Но проблема се усложни...
В момента ако задам да режи 0 със sed имам редове от рода на:

00501
00050

и няма никакви нули.Как да задам нещо такова: ipfw list

00009
00040
00050
00090
00100
00200

Ако 4тия символ в думата/цифрата е различен от 0, изпиши Hello?
Дугото което ще е по-лесно и за мен: мога ли да задам на промвенлива рейндж?Пример:

test=1-100

тест да има стойност от 1 до 100.След което мн лесно ще мога да правя проверките.
« Последна редакция: Dec 05, 2010, 13:05 от mrowcp »
Активен

Some Things Just Are The Way They Are

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: изтриване на част от текст
« Отговор #9 -: Dec 05, 2010, 13:13 »
В този ред на мисли се сетих да питам и за: има ли начин да задам проверка на граници?Пример:
в момента реда е по следния начин:

Код
GeSHi (Bash):
  1. if [ "$?" -eq 0 ] && [ $num -gt 09 ] && [ $num -lt 12 ];then

има ли начин да не ползвам и -gt и -lt , а да задам граница 9-12?
как да не работи? ти помисли ли малко?
Код:
[root@dns ~]# aa=0100
[root@dns ~]# if [ $aa -lt 90 ] || [ $aa -gt 110 ]; then echo Yes;fi
[root@dns ~]# aa=0089
[root@dns ~]# if [ $aa -lt 90 ] || [ $aa -gt 110 ]; then echo Yes;fi
Yes
[root@dns ~]# aa=0111
[root@dns ~]# if [ $aa -lt 90 ] || [ $aa -gt 110 ]; then echo Yes;fi
Yes
Активен

0x2B|~0x2B

mrowcp

  • Напреднали
  • *****
  • Публикации: 450
    • Профил
Re: изтриване на част от текст
« Отговор #10 -: Dec 05, 2010, 13:26 »
В този ред на мисли се сетих да питам и за: има ли начин да задам проверка на граници?Пример:
в момента реда е по следния начин:

Код
GeSHi (Bash):
  1. if [ "$?" -eq 0 ] && [ $num -gt 09 ] && [ $num -lt 12 ];then

има ли начин да не ползвам и -gt и -lt , а да задам граница 9-12?
как да не работи? ти помисли ли малко?
Код:
[root@dns ~]# aa=0100
[root@dns ~]# if [ $aa -lt 90 ] || [ $aa -gt 110 ]; then echo Yes;fi
[root@dns ~]# aa=0089
[root@dns ~]# if [ $aa -lt 90 ] || [ $aa -gt 110 ]; then echo Yes;fi
Yes
[root@dns ~]# aa=0111
[root@dns ~]# if [ $aa -lt 90 ] || [ $aa -gt 110 ]; then echo Yes;fi
Yes

Не може да е вярно!Сигурен съм, че го тествах няколко пъти и даваше грешка :( Сега го пренаписах и вярно, че работи... Проверява си ги без проблем, дори и с 00 отпред.
Мерси много :)

П.С. Не трябва ли да е && а не || ? Ако е по-голямо от 90 И по-малко от 110 ( примера с 89 )

P.S.2 Да ползвам пак темата да питам: как да изтрия ред от тхт файл с команда?
Пример: cat test.txt
1vi red neshto
2ri red blabla
3ti red pakneshto

Искам да задам изтриване на целия 2ри ред ot test.txt с команда.Нещо като: grep blabla test.txt |del

Намерих отговора :) grep -v
« Последна редакция: Dec 05, 2010, 16:05 от mrowcp »
Активен

Some Things Just Are The Way They Are

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: изтриване на част от текст
« Отговор #11 -: Dec 05, 2010, 16:34 »
В моя пример логиката е обратна, аз търся (и печатам на екрана) ако числото е <90 или >110. АКо искаш да е в интервала примерно 90 до 100 трябва да е:
Код:
if [ $aa -гt 89 ] && [ $aa -лt 111 ]; then echo Yes;fi
awk го можетова с махане на един ред, нещо от рода:
Код:
cat file|awk 'NL!=2 {print $0}'
Активен

0x2B|~0x2B