поиск и замена с помощью grep (не sed)

я не читаю глубже man setfacl,но кажется, вам это нужно.

man setfacl часть содержимого:

ПРИМЕРЫ

  Предоставление дополнительному пользователю прав на чтение
setfacl -m u:lisa:r файл

Отзыв прав на запись для всех групп и всех именованных пользователей (используя действующую маску прав)
setfacl -m файл m::rx

Удаление записи именованной группы из ACL файла
setfacl -x g:файл персонала

Копирование ACL одного файла в другой
получитьфакл файл1 | setfacl --set-file=- файл2

Копирование ACL доступа в ACL по умолчанию
getfacl --доступ к каталогу | setfacl -d -M- директор
 
0
26.06.2017, 15:12
2 ответа

grepпредназначен только для (и первоначально )печатал (только )строки, соответствующие шаблону. Вот что grepозначает (на основе командыg/re/ped).

Некоторые grepреализации добавили несколько функций, которые немного ущемляют роль других команд. Например, у некоторых есть несколько -r/ --include/ --excludeдля выполнения части работы find.

В GNU grepдобавлена ​​опция -o, которая заставляет выполнять часть работы sed, позволяя редактировать совпадающие строки.

pcregrepрасширил его с помощью -o1, -o2... для печати того, что соответствует группам захвата. Таким образом, с этой реализацией, хотя она и не была предназначена для этого, вы можете фактически заменить:

sed 's/old/new/'

с:

pcregrep --om-separator=new  -o1 -o2 '(.*?)old(.*)'

Однако это не работает должным образом, если группы захвата соответствуют пустой строке.На входе типа:

XoldY
Xold
oldY

это дает:

XnewY
X
Y

Вы можете обойти это, используя еще более неприятные приемы, такие как:

PCREGREP_COLOR= pcregrep --color=always '.*old.*' |
  pcregrep --om-separator=new -o1 -o2 '^..(.+?)old(.+)..' |
  pcregrep -o1 '.(.*).'

То есть добавьте и добавьте\e[m(раскрашивающую escape-последовательность )ко всем совпадающим строкам, чтобы убедиться, что по обе стороны от oldесть хотя бы один символ, и затем удалите их.

6
28.01.2020, 02:14

Нет, grep не может выполнять замены (за один вызов), вот почему возникла явная потребность в sed (а позже и в awk как лучшем языке для обработки текста).

2
28.01.2020, 02:14

Теги

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