2015-02-02 4 views
0

Рассмотрим следующие данные:Awk шаблон поиска с косой черты, как выражение дополняется кронштейном

# comments 
files-with-relative-paths1 
    files-with-relative-paths2 
/files-with-absolute-paths1 
    /files-with-absolute-paths2 

Я хочу, чтобы соответствовать только строки с именами файлов с относительными путями, т.е. не ведущий / (ведущий пробельные не может существовать), используя awk. Я попытался следующие команды:

$ awk '/^\s*[^/]/' testfile.txt 
# comments 
files-with-relative-paths1 
    files-with-relative-paths2 
    /files-with-absolute-paths2 

$ awk '/^[^#]\s*[^/]/' testfile.txt 
files-with-relative-paths1 
    files-with-relative-paths2 
/files-with-absolute-paths1 
    /files-with-absolute-paths2 

Как вы можете видеть, что они не дают правильные результаты

+0

имена файлов могут начинаться с '# 'знаки так как вам определить «комментарий»? –

ответ

0

Я не заметил ! флаг в awk, что делает его значительно проще:

awk '!/(^#)|(^\s*[/])/' testfile.txt 

documentation не уточнил это для стандартного рисунка.

+1

Может быть написано как '!!/^ (# | \ S * \ /)/'' –

0

Если вы Ok с помощью Perl:

perl -lne 'print unless(/^\s*\//)' your_file 
+0

Благодарим вас за ответ. Я ценю другие решения, но я не знаком с perl, и если не нужно, я придерживаюсь awk. И я также опустил, что на самом деле это данные с несколькими столбцами, где awk удобно печатает нужный столбец. Я должен перефразировать мой вопрос. Первоначально я подозревал, что проблема несколько связана с двойным значением прямой косой черты – Hotschke

0

Предполагая, что ни один из ваших имен файлов может начинаться с #:

$ awk '$1 ~ /^[^#/]/' file 
files-with-relative-paths1 
    files-with-relative-paths2 
Смежные вопросы