grep -Px '\tworkgroup = WORKGROUP' ./file.conf
Да спасибо.
-P, --perl-regexp ШАБЛОН - регулярное выражения языка Perl
Сам бы я не понял, что здесь нужен вот такой ключ.(я перебирал ключи и возможно что-то не правильно сделал, поэтому и не получалось)
Пользователь добавил сообщение 03 Июля 2017, 17:22:49:
renzrv, скорее всего это конфиг
да, это для конфигурационных файлов
sed '/workgroup\s*=/{/^\tw.* = \bWORKGROUP\b/! d}'
Удаляет все строки, кроме указанной в шаблоне, если будут обнаружены строки идентичные шаблону то они останутся.
И удаляет пустую строку сразу после последней оригинальной (что не совсем удобно).
Поясните пожалуйста некоторые моменты :
/workgroup\s*=/ - шаблон, для поиска вхождения, которое нужно заменить
шаблон состоит из – эталонного слова - workgroup-, после этого слова ищется
\s*= - любое количество пробельных символов до знака равно.
^\tw.* – от начала строки, найти символ табуляции, одну букву – w –
.* = - найти любое количество символов, кроме символа переноса строки (\n )
= \b - после знака равно найти символ пробела и далее стоит якорь «граница слова»
Почему здесь решили использовать якорь?\bWORKGROUP\b
! –
для чего он здесь?d – это флаг для удаления строки
Не могли бы написать по какому шаблону составлено это выражение.
Например, как я вижу
sed '
/шаблон
/{
/замена
/! d}' -

Но я нигде не видел описание такой конструкции, поясните пожалуйста
Пользователь добавил сообщение 03 Июля 2017, 17:51:13:
При вызове флага d можно указывать пару шаблонов - будут удалены строки, в которых встретится шаблон, и те строки, которые находятся между ними
например,
sed '/третий/,/пятый/d' ./file4.txt
Но не очень похоже на вашу конструкцию .
Пользователь добавил сообщение 03 Июля 2017, 20:35:12:
/workgroup\s*=/ - найти все строки вот по - такому шаблону
{/^\tw.* = \bWORKGROUP\b/! d} - удалить все строки , кроме подвыражения '
/^\tw.* = \bWORKGROUP\b
/ 'заключенного в фигурные скобки
! - этот символ, символ отрицания
Тогда конструкция будет такого вида
sed "/шаблон//d"
Я правильно все понял ?