awk возвращает указанный путь недопустимой ошибки в окнах cmder

Я пробую этот awk oneliner из здесь на cmder-Windows10:

awk '/> \\box.=/,/^$/{print}'

для просмотра файла журнала. но я получаю эту ошибку:

Указанный путь недействителен.

Я знаю основы регулярных выражений, но я не могу понять, что должна делать приведенная выше команда. Буду признателен, если вы поможете мне с:

  • уточните приведенную выше команду и что она должна вернуть? Если я пойму, что, возможно, я смогу воспроизвести это с помощью какой-то родной команды Windows вне cmder. вероятно, используя findstr?
  • почему я получаю эту ошибку? и если/как я могу отредактировать команду для решения проблемы?

P.S. благодаря этому сообщению я смог запустить команду awk '/box.=/,/^\r\n/' foo, и она работает без ошибок возвращая то, что ожидается вернуть. но я до сих пор не знаю, почему исходная команда возвращает эту ошибку.


person Foad    schedule 15.11.2018    source источник
comment
Он пытается сопоставить и напечатать строки между двумя шаблонами. Шаблон 1 — это > \box.=, где . соответствует любому символу. А Pattern 2 - это пустая строка, т.е. ^$   -  person anubhava    schedule 15.11.2018
comment
Я не понимаю части: > (больше пробела) и /,/ (косая черта, запятая, косая черта). откуда взялась " (запятая)?   -  person Foad    schedule 15.11.2018
comment
ну, файл журнала, который у меня есть, слишком длинный, и он также, вероятно, содержит некоторую конфиденциальную информацию, которую я не должен публиковать публично на pastebin или где-то в этом роде. В данный момент я просто хочу понять, что означает приведенная выше команда. Кроме того, это может быть воспроизведено по любому произвольному пути внутри cmder. так что это независимо от файла журнала, который у меня есть.   -  person Foad    schedule 15.11.2018
comment
давайте сломать его. во-первых, является ли приведенная выше команда допустимой командой awk? если да, то почему он возвращает эту ошибку? если шаблон не существует, он ничего не должен возвращать, я ошибаюсь?   -  person Foad    schedule 15.11.2018
comment
Из вашей ссылки: Вы можете передать результат awk '/> \\box.=/,/^$/{print}' Как вы используете этот awk? Точную командную строку, пожалуйста.   -  person James Brown    schedule 15.11.2018
comment
@JamesBrown Я использую его именно так, как вы предложили в своем посте. awk ... foo   -  person Foad    schedule 15.11.2018
comment
И у вас ничего не выводится, только ошибка?   -  person James Brown    schedule 15.11.2018
comment
@revo Я нет! зачем что-то скрывать от вас ребята?!!!   -  person Foad    schedule 15.11.2018
comment
пожалуйста, смотрите мой P.S.   -  person Foad    schedule 15.11.2018


Ответы (1)


Демонстрация того, что делает ваша команда:

$ cat foo
nope
> \box.=
this
and this

nope

Ваш скрипт выполнен:

$ awk '/> \\box.=/,/^$/' foo
> \box.=
this
and this
            # this is the empty line

Если вы запускаете его в Windows, /^$/ может не работать, так как Windows использует \r\n символы новой строки. Вместо этого попробуйте:

$ awk -v RS="\r\n" '/> \\box.=/,/^$/'` file
person James Brown    schedule 15.11.2018
comment
Спасибо. не могли бы вы написать полную команду с \r\n для Windows? - person Foad; 15.11.2018
comment
@Foad, возможно, строка, в которой вы ожидаете остановки поиска, на самом деле не пуста. В среде unix вы можете использовать od -c или cat -t -e, чтобы лучше понять, что на самом деле находится во входном файле. Если вы включите вывод одного из них (или фрагмент, если файл большой), у людей будет лучшее представление о том, с чем вы имеете дело. - person ghoti; 15.11.2018
comment
@ghoti не уверен, понимаю ли я твою точку зрения. но я протестировал другие команды awk в предложенном выше файле foo, и он работает. так что файл в порядке, awk в порядке. но в команде есть что-то, что делает ее несовместимой со средой cmder. - person Foad; 15.11.2018
comment
пожалуйста, смотрите мой P.S. - person Foad; 15.11.2018