Тема: Программируем в ракушку SHELL

Ответить в теме
Показано с 1 по 8 из 8
  1. Вверх #1
    Постоялец форума
    Пол
    Мужской
    Сообщений
    1,480
    Репутация
    42

    По умолчанию Программируем в ракушку SHELL

    Есть файл test.dat:
    Код:
    1st_test
    test-2nd
    test
    нужно найти в нем строку, содержащую отдельно стоящее слово test.
    Особенность в том, что в строке test-2nd после искомой test стоит "минус", т.е. разделитель.
    Неудачные попытки:
    1.
    Код:
    :~$ grep -w test test.dat
    test-2nd
    test
    
    :~$ man grep
    -w, --word-regexp
    Select only those lines containing matches that form whole words. The test is that the matching substring must either be at the beginning of the line, or preceded by a non-word constituent char acter. Similarly, it must be either at the end of the line or followed by a non-word constituent character. Word-constituent characters are letters, digits, and the underscore.
    2.
    Код:
    &#58;~$ grep "\<test\>" test.dat
    test-2nd
    test
    
    &#58;~$ man grep
    REGULAR EXPRESSIONS
    The symbols \< and \> respectively match the empty string at the beginning and end of a word.
    здесь завуалированный мат


  2. Вверх #2
    Тигровна Аватар для Tigra
    Пол
    Женский
    Адрес
    /dev/null
    Сообщений
    1,528
    Репутация
    267
    mancurt,
    grep "test " test.dat
    как вариант )
    т.е - указываешь пробел после слова
    нехорошо, да. Если test будет в конце строки не сработает.
    Пока ничего другого в голову не пришло
    Не будите во мне Зверя, он и так не высыпается

  3. Вверх #3
    Постоялец форума
    Пол
    Мужской
    Сообщений
    1,480
    Репутация
    42
    8(
    К сожелению не подходит, т.к. ни файл ни искомое слово менять нельзя.

    ЗЫ На самом деле вопрос - это ситуация сложившаяся в ходе работы неск скриптов и менять их кардинально не хочется.
    здесь завуалированный мат

  4. Вверх #4
    Постоялец форума
    Пол
    Мужской
    Сообщений
    1,480
    Репутация
    42
    Код:
    &#58;~$ awk '$1=="test"' test.dat
    test
    Работает, но как я сам ранее и написал - это не выход 8(
    здесь завуалированный мат

  5. Вверх #5
    Тигровна Аватар для Tigra
    Пол
    Женский
    Адрес
    /dev/null
    Сообщений
    1,528
    Репутация
    267
    То есть, нужно заставить скрипты работать, ничего в них не изменив?
    хм.. Какого же масштаба изменения будут считаться приемлемыми?
    С точки зрения grep "-" это "space", и ничего тут с ним не поделаешь...
    Можно еще так:
    grep -w test test.dat | grep -v -

    Сработает)
    Не будите во мне Зверя, он и так не высыпается

  6. Вверх #6
    Постоялец форума
    Пол
    Мужской
    Сообщений
    1,480
    Репутация
    42
    Цитата Сообщение от Tigra
    То есть, нужно заставить скрипты работать, ничего в них не изменив?
    хм.. Какого же масштаба изменения будут считаться приемлемыми?
    КАРДИНАЛЬНО менять скрипты не хочется.
    Мало ли, может есть какой-то ключ к grep, о котором я не знал...
    В любом случае спасибо за советы.

    Может поковырять как-то с испльзованием регулярных выражений...
    здесь завуалированный мат

  7. Вверх #7
    Новичок Аватар для Metazoa
    Адрес
    из многоклеточных мы
    Сообщений
    43
    Репутация
    14
    Бином Ньютона для случая пробелов в качестве разделителей:

    grep -E "(^|.* )test($| .*)" test.dat

    Архисложно, не правда ли ?

  8. Вверх #8
    Постоялец форума
    Пол
    Мужской
    Сообщений
    1,480
    Репутация
    42
    Цитата Сообщение от Metazoa
    Бином Ньютона для случая пробелов в качестве разделителей:

    grep -E "(^|.* )test($| .*)" test.dat

    Архисложно, не правда ли ? ;)
    А вот часть этого действительно я смогу использовать. Учитывая
    Цитата Сообщение от Tigra
    mancurt,
    grep "test " test.dat
    как вариант )
    т.е - указываешь пробел после слова
    нехорошо, да. Если test будет в конце строки не сработает.
    Пока ничего другого в голову не пришло
    Вместо пробела можно просто использовать якорь "конец строки" $ : grep -w "test$" test.dat

    ______________________

    Всем спасибо, проблема решена. До следущих вопросов...
    здесь завуалированный мат


Ответить в теме

Похожие темы

  1. Shell построит самое большое судно на Земле
    от LindaFromOslo в разделе Основной форум
    Ответов: 1
    Последнее сообщение: 14.10.2009, 17:21
  2. Shell жжет!
    от pproffessor в разделе Авто и мото
    Ответов: 8
    Последнее сообщение: 22.09.2009, 14:49
  3. Программируем в ракушку SHELL. Часть 2 : getopts
    от mancurt в разделе Программирование
    Ответов: 14
    Последнее сообщение: 21.04.2005, 07:43
  4. Anime :: Ghost in shell 2
    от iFog в разделе Кино и видео
    Ответов: 2
    Последнее сообщение: 02.11.2004, 06:48

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения