Это можно сделать с разрешениями группы. Вам нужно создать группу пользователей, добавить двух пользователей и изменить права собственности группы на целевой каталог. Сначала создайте группу:
groupadd newusergroup
Затем добавьте в нее пользователей:
usermod -G newusergroup user1
usermod -G newusergroup user2
Затем измените права доступа к целевому каталогу:
chgrp newusergroup /myDirectory
Это все при условии, что вы хотите, чтобы оба пользователя имели доступ к каталогу. Если вы хотите, чтобы доступ имел только пользователь 1, просто измените разрешения следующим образом:
chown user1.user1 /myDirectory
Это по сути то же самое, что 39. Добавить строку к следующей, если она заканчивается обратной косой чертой "\". из работы Петериса Круминса Sed One-Liners Explained, Часть I: Расстояние между файлами, нумерация, преобразование и замена текста , но с запятой вместо обратной косой черты в качестве символа продолжения, то есть
sed -e :a -e '/,$/N; s/,\n/,/; ta' list.txt
blue-image1.jpg,blue-image2.jpg,blue-image3.jpg
red-image1.jpg,red-image2.jpg,red-image3.jpg
cat list.txt | sed ': a; N; $! ba; s /, \ n /, / g'
вывод:
blue-image1.jpg,blue-image2.jpg,blue-image3.jpg
red-image1.jpg,red-image2.jpg,red-image3.jpg
Reconozco que esta próxima respuesta es técnicamente menos eficiente en la CPU que una simple llamada a sed
, pero la estoy agregando a la mezcla porque es mucho más fácil de recordar, escribir, leer, entender y modificar que los demás:
cat list.txt | tr ',\n' '#@' | sed 's/#@/,/g;s/@/\n/g'
Решение:
perl -lape '$\=/,/?"":"\n"' list.txt
Пояснение:
Устанавливает разделитель выходных записей $\
на пустую строку ""
, если строка содержит запятую; сбрасывает его на \n
, в противном случае (разделитель выходных записей — это то, что отделяет одну строку от другой в выходных данных; в Unix это обычно перевод строки ). Эквивалент более длинного и легко читаемого:
perl -lape '(/,/) ? ($\="") : ($\="\n")' list.txt
или аналогично:
perl -lape 'if (/,/) {$\=""} else {$\="\n"}' list.txt
Комментарии:
Причина, по которой sed
не делает того, что ожидал OP, заключается в том, что он удаляет разделитель записей перед работой со строкой и возвращает его после этого. Разделителем записей по умолчанию является "\n"
, для замены не найдено "\n"
. Я выбрал perl
, потому что знаю, что разделитель записей представлен как специальная переменная, которой можно явно манипулировать.
Мое решение основано на размещенном входном образце и желаемом результате. Я не думаю, что это отвечает на вопрос в заголовке:Замените запятую на новую строку, следующую только за командой и пробелом . Я читал это много раз, но эти слова просто не образуют для меня значимой последовательности.
Изменить -более простое решение:
perl -pe 's/,\n/,/' list.txt
Это то, что я предложил в комментариях, и я подумал, что также добавлю это к ответу. Несмотря на то, что он краткий и непосредственный, какой смысл использовать perl
, если вы не можете продемонстрировать какую-нибудь маленькую -известную специальную переменную и неясный синтаксис?;-P
вы можете использовать команду вставки:
paste -s -d " " list.txt | sed -e 's/[a-z]\ /g\n/g'
синий -image1.jpg, синий -image2.jpg, синий -image3.jpg красный -image1.jpg, красный -image2.jpg, красный -image3.jpg
Просто и легко с:
$ sed -z 's/,\n/,/g' infile
blue-image1.jpg,blue-image2.jpg,blue-image3.jpg
red-image1.jpg,red-image2.jpg,red-image3.jpg
Переключатель -z
устанавливает разделитель входных записей на NUL
, что позволяет избежать проблем с \n
. См.man sed
:
-z, --null-data
separate lines by NUL characters
Я, вероятно, получу -голосов за это, потому что это некрасиво, но я должен упомянуть, что бы я сделал в реальной жизни:)
Что вы должны сделать, так это использовать ответ, предоставленный simlev, используя sed с -z
.
sed -z 's/,\n/,/g' list.txt
Учитывая приведенный выше список в файле с именем temp.txt
vim temp.txt
:%s/,\n/,/
:x
Тогда сделайте себе одолжение и бегите vimtutor
.
Опция :Подобный тип поиска и замены регулярных выражений можно выполнить с помощью NotePad++
Найдите что:,\n
Заменить на:,
Тип поискаregex