Если вы создали нового пользователя и планируете устанавливать что-то от имени этого пользователя , вам нужно будет сначала предоставить ему привилегии root в файле /etc/sudoers. Ниже приведен пример файла sudoers, если вы планируете предоставить этому пользователю полные привилегии root. Это не лучшая практика, если вы хотите ограничить возможности пользователей
#Спецификация привилегий пользователя
root ВСЕ= (ВСЕ :ВСЕ )ВСЕ
пользователь _имя ВСЕ= (ВСЕ :ВСЕ )ВСЕ
После этого вы можете бежать:
sudo apt install ruby-railties
(как новый пользователь)
и сразу после этого введите новый пароль пользователя
[sudo] пароль для пользователя _имя:
Проблема с вашим кодом заключается в том, что вы пытаетесь запустить команду sed
, которая выглядит как
2 5 7 10p
Это явно не имеет смысла для sed
, поэтому он жалуется.
Часть вашей проблемы заключается в использовании одной строки для хранения множества различных элементов (номеров строк ). Это лучше сделать с помощью массива. После каждого элемента массива (номер строки )необходимо вставить p
, чтобы сделать его отдельной командой sed
.
Для чисел 2, 5, 7 и 10 вам нужен скрипт sed
, который выглядит примерно так
2p; 5p; 7p; 10p;
или
2p;5p;7p;10p;
или
2p
5p
7p
10p
Такой скрипт можно довольно легко создать из массива вbash
:
lines=( 2 5 7 10 )
printf '%sp\n' "${lines[@]:-"q;"}" | sed -n -f /dev/stdin longText.txt
Это использует printf
для создания сценария sed
из списка чисел и передает его в sed
, который считывает его из стандартного ввода с помощью -f /dev/stdin
и применяет к вашему файлу.
Если список пуст, printf
выдаст выражение sed
, которое ничего не делает, а затем завершится sed
.
Если вам нужно использовать числа в строке, вы можете преобразовать эту строку в действительный sed
сценарий и применить его к своему файлу следующим образом:
sed 's/[[:digit:]]\{1,\}/&p;/g' <<<"$list" | sed -n -f /dev/stdin longText.txt
При наличии строки 2 5 7 10
будет сгенерирован скрипт sed
2p; 5p; 7p; 10p;
, который затем применит его к вашему файлу аналогичным образом, как описано выше.
Пустой список не приведет к тому, что sed
ничего не выведет.
Просто поместите эхо перед вашей командой sed
, чтобы увидеть, где и почему вы идете не так.
Один из способов использования редактора sed
—:
# assuming default IFS
## based on Kusalananda's observations
set -f ;# disable globbing
list="2 5 7 10"
for i in $list;do
echo "${i}p"
done | sed -nf - longText.txt
## or per Kusalanda method has a bug in it
## for empty list it generates wrong output
# printf '%sp\n' $list | sed -nf - lonxt.txt