Замените строку перед определенной строкой

это должно решить вашу проблему:

sudo chown -R $USER:adm /data
chmod 0775 /data

Это даст вам и всем пользователям в группе adm доступ на чтение и запись. Все остальные пользователи, не входящие в группу adm, имеют только доступ на чтение. Группа adm является одной из групп по умолчанию для всех пользователей в Ubuntu. Для другого дистрибутива вы можете проверить, какие группы назначаются новым пользователям по умолчанию, и использовать одну из них. В качестве альтернативы вы можете создать новую группу (например, data) и добавить в нее пользователей, которые должны получить доступ к данным.

Если вы хотите, чтобы все пользователи имели доступ к данным, независимо от того, в какой группе они находятся, то строка chmod должна выглядеть так:

chmod 0777 /data
6
04.09.2018, 18:23
4 ответа

попробуй это,

perl -0777 -pe 's/,([^\n,]*\n[^\n]*PRIMARY)/)$1/g'

Это заменит последний ,на )в строках перед любой строкой, включая PRIMARY.

Пояснение

  • perl -0777глотать весь файл (читать как одну строку)
  • s/search_pattern/replacement/gГлобальная замена шаблона поиска заменой
7
27.01.2020, 20:20

Если вы используете edвместо sed, вы можете использовать адрес регулярного выражения с отрицательным смещением:

g/PRIMARY/-1 s/,$/)/

Пр.

$ printf 'g/PRIMARY/-1 s/,$/)/\n,p\nq\n' | ed -s file
ID_SOUR_CALENDAR BIGINT NOT NULL DEFAULT 0  COMPRESS 0 )
UNIQUE PRIMARY INDEX ( CALENDAR_DATE );
ID,
ID_SOUR )
PRIMARY INDEX ( CALENDAR_DATE );

или (для редактирования места -)

printf 'g/PRIMARY/-1 s/,$/)/\nwq\n' | ed -s file

Замена будет соответствовать ВСЕМ экземплярам /PRIMARY/-, если вы хотите заменить только первый, удалите модификатор g.

5
27.01.2020, 20:20

С помощью POSIX-lysedвы можете сделать следующее:

sed -e '
    /PRIMARY/!{x;1!p;d;}
    x;s/,/)/;$G
' input-file.txt

Выход:

ID_SOUR_CALENDAR BIGINT NOT NULL DEFAULT 0  COMPRESS 0 )
UNIQUE PRIMARY INDEX ( CALENDAR_DATE );
ID,
ID_SOUR )
PRIMARY INDEX ( CALENDAR_DATE );

Рабочий:

  • Для не -ОСНОВНЫХ строк мы сохраняем строку и печатаем ту, которую мы сохранили в холде.
  • А для ПЕРВИЧНОГО мы извлекаем предыдущее и осуществляем преобразование.
2
27.01.2020, 20:20

ИспользованиеGNU sed:

sed  'N;s/,\(\s*\n.*PRIMARY\)/)\1/;P;D' file

ID_SOUR_CALENDAR BIGINT NOT NULL DEFAULT 0  COMPRESS 0 )
UNIQUE PRIMARY INDEX ( CALENDAR_DATE );
ID,
ID_SOUR )
PRIMARY INDEX ( CALENDAR_DATE );
  • NЧтение/добавление следующей строки ввода в пространство шаблонов.
  • PПечатать до первой встроенной новой строки текущего пространства шаблонов.
  • DУдалить до первой встроенной новой строки в пространстве шаблона. Начать следующий цикл, но пропустить чтение из ввода, если в пространстве шаблонов все еще есть данные.
9
27.01.2020, 20:20

Теги

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