Когда у меня возникла эта проблема, она была вызвана тем, что старые сеансы задерживались и вызывали проблемы. Попробуйте tmux ls
и посмотрите, найдете ли вы что-нибудь. Вы можете повторно подключиться к старому сеансу с помощью tmux -S <session>
---, это сработало для меня, хотя обычный tmux
не смог начать новый сеанс.
Вы также можете закрыть все сеансы с помощью tmux ls -F "#S" | xargs -n 1 tmux kill-session
, чтобы получить список сеансов по именам и закрыть их автоматически. (Обязательно сначала проверьте эти сеансы, иначе вы можете потерять информацию!)
Не вижу там необходимости в |
. Вы можете использовать несколько -e
опций, разбросанных по строкам:
grep -e foo \
-e bar \
-e barz
Аргумент шаблона на самом деле представляет собой список шаблонов, разделенных символами новой строки. Это верно даже для grep -F
:, вы можете искать несколько строк. Так что вы можете написать:
grep 'foo
bar
barz'
Но обратите внимание, что строки продолжения не должны иметь отступ :любой начальный пробел будет частью шаблона. По этой причине вы можете предпочесть передавать список шаблонов в виде отдельных аргументов с -e
перед каждым шаблоном. Затем вы можете использовать \
в конце строки, чтобы разделить команду оболочки между строками между аргументами команды grep
. Два синтаксиса эквивалентны.
grep -e 'foo' \
-e 'bar' \
-e 'barz'
Обратите внимание, что ни одна из них не работает с текущими версиями GNU grep
при передаче опции -P
(для регулярных выражений PCRE ), которая в этих случаях не работает с grep: the -P option only supports a single pattern
. Однако вы можете использовать pcregrep
вместо GNU grep -P
и использовать флаг x
для ввода многострочных -регулярных выражений строки:
pcregrep '(?x)
foo |
bar |
barz'
При использовании (?x)
все пробельные символы, включая SPC и NL, игнорируются, что позволяет вам делать отступы в коде по своему усмотрению.
с использованием Raku (, ранее известного как Perl _6)
$ cat foo_bar_barz.txt | raku -ne '.grep(/
| foo
| bar
| barz
/).put;'
#выходы:
1. foo
2. bar
3. barz
Одной из основных причин для Perl6 (теперь проекта Raku )было переписать механизм регулярных выражений, чтобы можно было вводить более читаемый код. Настройки Raku по умолчанию включают в себя возможность вставлять пробелы между токенами, записывать регулярные выражения в несколько строк, а также пересмотр системы «модификаторов» (, которая теперь называется «наречиями» ). [В качестве примера последнего, где вы использовали тег «g» в конце регулярного выражения, теперь, когда «:g» появляется в начале регулярного выражения, чтобы вы знали, что вы пытаетесь сопоставить с получить -идти].
Выше приведено решение Raku для приведенного вами примера. Обратите внимание, что в Raku оператор чередования |
реализует самую длинную -токен -, соответствующую стратегии (LTM ). Также вы можете свободно вставлять «ведущий» |
оператор чередования, чтобы помочь вам выстроить токены (см. выше ). Раку принимает это как обычное дело.
Ниже, чтобы дать вам представление о том, что происходит за кулисами, я захватываю три токена по отдельности, используя оператор сопоставления m//
вместо grep()
. Захваты выполняются с помощью круглых скобок,с нумерацией, начинающейся с$0
:
$ cat foo_bar_barz.txt | raku -ne 'say m/
| (foo)
| (bar)
| (barz)
/;'
#выходы:
「foo」
0 => 「foo」
「bar」
0 => 「bar」
「barz」
0 => 「barz」
Nil
Обратите внимание, что входной файл выглядит следующим образом: (с фиктивной строкой в конце, чтобы быть честным):
$ cat foo_bar_barz.txt
1. foo
2. bar
3. barz
4. ziggy