Как к///sed-e' все кроме определенного шаблона?

При использовании об/мин в конечном счете Вы вызываете повреждение в базе данных пакета, существует опция восстановить эту базу данных, таким образом препятствуя тому, чтобы Вы имели для прохождения через в основном переустанавливания. Поскольку один пользователь здесь указал, что это сделано в Debian dpkg --configure -a.

5
15.12.2018, 23:55
4 ответа

Предположим, что строка содержит максимум одну из этих [118470]%123[118471] лексем, и что каждая строка содержит такую лексемку.

Мета-символ [118472] \( \)[118473] обозначает группу матчей - на которую при замене делается ссылка через обратную ссылку [118474] \1[118475]. [118476]^[118477]/[118478]$[118479] соответствуют началу/концу строки.

Иначе вы можете предварительно отфильтровать вход, например:

(когда не все строки содержат такую лексему)

Другой вариант:

(когда строка может содержать несколько таких лексем)

Вот разрывы строк, вставляемые непосредственно перед и после каждой лексемы - в первой части трубки. Затем часть [118480]grep[118481] удаляет все не [118482]%123[118483] маркерные линии.[118117].

5
27.01.2020, 20:32
[118097] В этом случае лучше использовать [118462]grep -o[118463]:

Предположим, что ваша версия [118464]grep[118465] поддерживает Perl-совместимые регулярные выражения ([118466]-P[118467]). В противном случае:

psexec \\nightmachine -u DOMAIN\User -p Password -i "C:\FilePath\Application.exe" argument1 argument2"
Используя GNU [118468]sed[118469], можно перевести пробелы на новые строки и получить нужные строки:

6
27.01.2020, 20:32
[118236] При работе с [118654]sed[118655] почти всегда целесообразно: [12147] Есть две причины. Первая - с несколькими строками [118656]/адресация/[118657] происходит быстрее - она оптимизирована только для того, чтобы [118658]найти[118659] совпадение и не утруждать себя выбором только части строки для редактирования, а значит, сузить результат быстрее.[12148]Вторая причина в том, что можно проигрывать несколько операций редактирования с одного и того же адреса - это значительно облегчает задачу.[12149]Конечно, в этом случае, учитывая только те данные, которые вы показываете, на практике это не имеет никакого смысла. Тем не менее, вот как я бы сделал то, о чем вы спрашиваете:[12150]Он просто выбирает все символы, которые являются [118660]не-%[118661] символами в начале строки и все [118662]нецифровые [118663] символы в конце строки в адресе, а затем удаляет их с помощью [118664]s///[118665] - и все - вот и все. [12151]В его нынешнем виде он может неожиданно искажать данные, если вы подадите ему строки [118666], а не [118667], содержащие [118668]%-цифр[118669] - и поэтому адресация важна. Если ее немного изменить: [12152]Она становится безопаснее [118670] и [118671] быстрее.[118249].
3
27.01.2020, 20:32

В моем решении используется не sed, а grep с расширенным регрессом и опциями только согласования.


$ cat file
1: [18x14] [history 1/2000, 268 bytes] %3
2: [18x14] [history 1/2000, 268 bytes] %4 (active)
$ cat file | grep -Eo '%[0-9]+'
%3
%4

Использование grep в данном случае проще, чем использование sed.

.
2
27.01.2020, 20:32

Теги

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