Замени запятую новой строкой, следующей только командой и пробелом

Это можно сделать с разрешениями группы. Вам нужно создать группу пользователей, добавить двух пользователей и изменить права собственности группы на целевой каталог. Сначала создайте группу:

groupadd newusergroup

Затем добавьте в нее пользователей:

usermod -G newusergroup user1
usermod -G newusergroup user2

Затем измените права доступа к целевому каталогу:

chgrp newusergroup /myDirectory

Это все при условии, что вы хотите, чтобы оба пользователя имели доступ к каталогу. Если вы хотите, чтобы доступ имел только пользователь 1, просто измените разрешения следующим образом:

chown user1.user1 /myDirectory
0
11.12.2016, 18:53
8 ответов
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' yourfile
0
28.01.2020, 02:14

Это по сути то же самое, что 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
1
28.01.2020, 02:14

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
1
28.01.2020, 02:14

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'
3
28.01.2020, 02:14

Решение:

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

0
28.01.2020, 02:14

вы можете использовать команду вставки:

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

-1
28.01.2020, 02:14

Просто и легко с:

$ 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

4
28.01.2020, 02:14

Я, вероятно, получу -голосов за это, потому что это некрасиво, но я должен упомянуть, что бы я сделал в реальной жизни:)

Что вы должны сделать, так это использовать ответ, предоставленный simlev, используя sed с -z.

sed -z 's/,\n/,/g' list.txt

Учитывая приведенный выше список в файле с именем temp.txt


Опция :Используйте vi или vim. Откройте файл, затем введите следующее :
vim temp.txt
:%s/,\n/,/
:x

Тогда сделайте себе одолжение и бегите vimtutor.


Опция :Подобный тип поиска и замены регулярных выражений можно выполнить с помощью NotePad++

Найдите что:,\n
Заменить на:,
Тип поискаregex

0
06.02.2020, 15:21

Теги

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