Локальная установка glibc-2.23 приводит к сбою всех программ

Если это построчная и только одна строка для замены, я рекомендую добавить к самому файлу заменяющую строку, используя printf , сохраняя эта первая строка в пространстве хранения sed , и при необходимости отбрасывать ее. Таким образом, вам совсем не нужно беспокоиться о специальных символах. (Единственное предположение здесь состоит в том, что $ VAR содержит одну строку текста без каких-либо символов новой строки, о чем вы уже говорили в комментариях.) Кроме новых строк, VAR может содержать что угодно ], и это будет работать независимо.

VAR=whatever
{ printf '%s\n' "$VAR";cat somefile; } | sed '1{h;d;};/KEYWORD/g'

printf '% s \ n' напечатает содержимое $ VAR как буквальную строку, независимо от ее содержимого, за которой следует новая строка.( echo в некоторых случаях будет делать другие вещи, например, если содержимое $ VAR начинается с дефиса - это будет интерпретироваться как флаг опции, передаваемый в echo .)

Фигурные скобки используются для добавления вывода printf к содержимому somefile , когда он передается в sed . Здесь важны пробелы, разделяющие фигурные скобки сами по себе, как и точка с запятой перед закрывающей фигурной скобкой.

1 {h; d;}; как команда sed сохранит первую строку текста в sed удерживаемом пространстве , затем d удаляет строку (а не печатает ее).

/ KEYWORD / применяет следующие действия ко всем строкам, содержащим KEYWORD . Действие g et, которое получает содержимое пространства удержания и удаляет его вместо пространства шаблонов - другими словами, всю текущую строку. (Это не для замены только части строки.) Между прочим, удерживаемое пространство не очищается, просто копируется в пространство шаблонов, заменяя все, что там есть .

Если вы хотите привязать свое регулярное выражение, чтобы оно не соответствовало строке, которая просто содержит KEYWORD, а только строку, в которой нет ничего, кроме KEYWORD, добавьте привязка начала строки ( ^ ) и привязка конца строки ( $ ) к вашему регулярному выражению:

VAR=whatever
{ printf '%s\n' "$VAR";cat somefile; } | sed '1{h;d;};/^KEYWORD$/g'
6
29.03.2016, 15:40
0 ответов

Теги

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