точное совпадение в regrex при использовании энергии, человека, или меньше

Это обслуживает переменное количество полей в том же файле и последний сегмент, являющийся только частично заполненным, т.е. меньшего количества полей, чем указанный (на сегмент).
Отметьте, хотя, что, если количество полей в строке приводит к меньшему количеству сегментов, чем указанный, ничто не записано в выходной файл для тех сегментов нехватки.

awk -v 'ncol=5' -v 'pfix=file' '{
    fldn = 0
    sfix = 1
    segs = NF/ncol
    # round up if number of field is not evenly divisible by number of columns    
    segs = (segs == int(segs)) ?segs :int(segs)+1   
    while (fldn != NF) {
        fmod = (++fldn) % ncol
        printf "%s%s", dlim, $(fldn) >> pfix sfix 
        if (fmod == 1 ) { dlim = " " }
        if ((fmod==0 ) || (fldn==NF))  { 
            printf "\n" >> pfix sfix 
            dlim = ""; sfix++ 
        }
    } 
}' infile
6
06.03.2013, 18:21
2 ответа

В vim, использовать

/\(^\|\s\)-c\($\|\s\)

В less:

/(^|\s)-c($|\s\)

Вы могли использовать isk и границы слова в энергии, но это также соответствовало бы другим вещам, которые могли бы быть опциями; более безопасно явно искать пробелы.

2
27.01.2020, 20:27
  • 1
    , который я попробовал в странице справочника, она не работает, –  user138126 06.03.2013, 18:36
  • 2
    @user138126 Видит мое обновление, должен лучше соответствовать Вашему варианту использования. –  Chris Down 06.03.2013, 18:47
  • 3
    , ничего себе, это настолько сложно, может Вы объяснять это немного или является там любыми хорошими похожими статьями о том, как эти сценарии могут представить '-c' –  user138126 06.03.2013, 18:57

Более короткое выражение энергии для обеспечения символов предшествует или следует

/\(^\|\s\)\@<=-c\>

Эквивалентный человек/меньшее количество:

/(^|\s)-c\b

Дополнительное объяснение (Vim):

Вероятно, самая полезная часть регулярного выражения Vim -c\> который просто говорит, "Ищут '-c', но только если никакие письма не приходят прямо после". Большую часть времени можно, вероятно, сойти с рук просто поиск с /-c\>, но ради полноты, я включал выражение для проверки то, что прибывает перед '-c'. То выражение \(^\|\s\)\@<=, который выглядит сложным просто, потому что синтаксис регулярного выражения Vim является более подробным (в котором он требует, чтобы Вы вышли из группирующихся круглых скобок и 'или' канал). Выражение \(^\|\s\) означает "Начало строки или пробельного символа". Когда Вы помещаете \@<= после него это означает, "Действительно не соответствуют этому, просто удостоверьтесь, что это прибывает перед следующей частью регулярного выражения" (который только действительно полезен для операций поиска-и-замены). В сущности Вам, вероятно, не нужно \@<= часть. Вы могли сократить его далее путем исключения этого и добавления \v, который говорит Vim, что Вы не будете выходить из необычного синтаксиса. Это было бы похоже /\v(^|\s)-c>.

Объяснение эквивалентного человека/меньшего количества:

Намного более простой. Для синтаксиса регулярного выражения, используемого меньше (который является пейджером человека по умолчанию), \b совпадает с Vim \>, и Вы не должны выходить из круглых скобок или символа вертикальной черты. Это просто ищет строку '-c', который происходит в начале строки или сразу после пробельного символа и удостоверяется, что никакие другие письма не приходят после.

5
27.01.2020, 20:27

Теги

Похожие вопросы