Как использовать grep для буквального '..'

Вроде как разобрался. Очевидно, что-то в файле конфигурации мешало запуску сервера.

После реализации каждого изменения файла по одной строке за раз, наконец, выяснилось, что именно ForwardAgent без строки в конфигурации вызывает проблемы.

Еще немного покопавшись, мы обнаружили, что вы можете запустить демон напрямую, а не через службы, чтобы проверить, не появляется ли сообщение об ошибке.

/usr/sbin/sshd -Ddp 10222
/etc/ssh/sshd_config: line 90: Bad configuration option: ForwardAgent
/etc/ssh/sshd_config: terminating, 1 bad configuration options

Я не знаю, почему настройка ForwardAgent вызывает проблемы, но комментарии к этому позволили мне наконец запустить сервер.

1
23.05.2018, 06:56
1 ответ

Debido a que .es un comodín regex, grep '..'coincide con cada línea que tiene al menos dos caracteres:

$ echo "$gene" | grep '..'
     gene            89..1483
                     /gene="non-structural protein"
                     /gene="non-structural protein"
                     /gene="non-structural protein"
                     /gene="non-structural protein"
                     /gene="non-structural protein"
                     /gene="non-structural protein"
                     /gene="non-structural protein"
     gene            complement(1987..2763)
                     /gene="nucleocapsid protein"
                     /gene="nucleocapsid protein"

En las expresiones regulares, .es verdaderamente comodín :coincidirá no solo con cualquier letra o número, sino también con cualquier puntuación, espacio en blanco, tabulación o cualquier otro carácter.

Para hacer coincidir solo períodos, use-F:

$ echo "$gene" | grep -F '..'
     gene            89..1483
     gene            complement(1987..2763)

-Fes la abreviatura de --fixed-stringsy le dice a grepque trate el patrón como una cadena fija, no como una expresión regular.

Alternativamente, uno puede escapar de los puntos para que solo coincidan (hat tip:Nick):

$ echo "$gene" | grep '\.\.'
     gene            89..1483
     gene            complement(1987..2763)

O bien podemos obligar a grepa tratar los períodos como períodos literales colocándolos dentro de clases de caracteres (hat tip:dave _thompson):

$ echo "$gene" | grep '[.][.]'
     gene            89..1483
     gene            complement(1987..2763)

Sin embargo, si no necesita expresiones regulares, use -Fporque hace que grepel procesamiento sea mucho más rápido.

13
27.01.2020, 23:11

Теги

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