Нужна помощь в sed, чтобы заменить текст пустым пространством

Сfind:

find. -type f -name '*.out' -exec grep -q 'PATTERN' {} ';' \
    -exec sh -c 'cp "$1" "${1%.out}.gdx" /somewhere' sh {} ';'

В качестве альтернативы:

find. -type f -name '*.out' -exec grep -q 'PATTERN' {} ';' \
    -exec sh -c 'for name do cp "$name" "${name%.out}.gdx" /somewhere; done' sh {} +

Это найдет все файлы в текущей папке или ниже, имена которых заканчиваются на .out. Если файл .outимеет строку, совпадающую с PATTERN, файл .gdxв том же каталоге с тем же префиксом имени, что и файл .out, будет скопирован в /somewhereвместе с файлом .out..

Проверка того, существует ли уже запись каталога под /somewhereс тем же именем, что и у копируемых файлов, или действительно ли изначально существует файл .gdx, не выполняется.

См. также:

0
17.07.2020, 19:03
1 ответ
sed -i 's/# + : STANDANRD\\ADMIN_USERS_ONLY : ALL//g' config_file

должно помочь. Обратите внимание на двойную обратную косую черту, которая важна, поскольку обратная косая черта, за которой следует символ, имеет особое значение для синтаксического анализатора регулярных выражений. Эти метасимволы являются ярлыками для таких вещей, как пробел (\s), буквенно-цифровой символ(\w)или, в случае \Aначало строки (статья Википедии о регулярных выражениях содержит таблицу суммируя самые популярные метасимволы ). Поскольку обратная косая черта имеет особое значение, вы должны ввести двойную обратную косую черту, если хотите, чтобы в вашем файле соответствовала одна обратная косая черта.

Пример вывода на CentOS 7:

[tux@centos7 ~]$ cat config_file 
# + : STANDANRD\ADMIN_USERS_ONLY : ALL foo
[tux@centos7 ~]$ sed -i 's/# + : STANDANRD\\ADMIN_USERS_ONLY : ALL\(.*\)/\1/g' config_file
[tux@centos7 ~]$ cat config_file 
 foo
0
28.04.2021, 23:15

Теги

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