Grep regex возвращает подстроку, но исключает комментарии

101
8

Я хочу получить подстроку из файла, но только из строк, которым не предшествует восклицательный знак (который является символом комментария в Fortran). Я бы предпочел использовать grep (но не привязанный). Например:


inFile.txt:


calib_ss/baseline.txt
!calib_ss/base_sharpe.txt

Желаемый результат:


baseline

Я зашел так далеко:


grep -Po "(?<=/)[^/.]*(?=\.)" infile.txt

который возвращает


baseline
base_sharpe

Чтобы исключить строки, начинающиеся с! Я думал о объединении выражения с


^[^\!]

но я не справляюсь. Спасибо заранее!

спросил(а) 2013-08-15T13:48:00+04:00 7 лет, 3 месяца назад
1
Решение
93

Этот grep должен работать:


grep -Po '^[^!].*?(?<=/)\K[^/.]*(?=\.)' infile.txt

ВЫВОД:

baseline

Объяснение:


    ^[^!] будет соответствовать всем, кроме ! при запуске строки
    \K выполнит reset начало

ответил(а) 2013-08-15T14:21:00+04:00 7 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема