это должно решить вашу проблему:
sudo chown -R $USER:adm /data
chmod 0775 /data
Это даст вам и всем пользователям в группе adm доступ на чтение и запись. Все остальные пользователи, не входящие в группу adm, имеют только доступ на чтение. Группа adm является одной из групп по умолчанию для всех пользователей в Ubuntu. Для другого дистрибутива вы можете проверить, какие группы назначаются новым пользователям по умолчанию, и использовать одну из них. В качестве альтернативы вы можете создать новую группу (например, data) и добавить в нее пользователей, которые должны получить доступ к данным.
Если вы хотите, чтобы все пользователи имели доступ к данным, независимо от того, в какой группе они находятся, то строка chmod должна выглядеть так:
chmod 0777 /data
попробуй это,
perl -0777 -pe 's/,([^\n,]*\n[^\n]*PRIMARY)/)$1/g'
Это заменит последний ,
на )
в строках перед любой строкой, включая PRIMARY
.
Пояснение
perl -0777
глотать весь файл (читать как одну строку)s/search_pattern/replacement/g
Глобальная замена шаблона поиска заменой Если вы используете 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
.
С помощью 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 );
Рабочий:
Использование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
Удалить до первой встроенной новой строки в пространстве шаблона. Начать следующий цикл, но пропустить чтение из ввода, если в пространстве шаблонов все еще есть данные.