Я хочу добавить в файл следующее, /etc/securetty
используя sed
:
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9
Для этой цели я написал следующую команду:
sed -i '$a pts/0\\npts/1\\npts/2\\npts/3\\npts/4\\npts/5\\npts/6\\npts/7\\npts/8\\npts/9' /etc/securetty
что дает мне вывод:
pts/0\npts/1\npts/2\npts/3\npts/4\npts/5\npts/6\npts/7\npts/8\npts/9
Я явно что-то упускаю. Что может быть не так в моей sed
команде?
решение1
Простойоболочкаподход:
for i in {0..9}; do echo "pts/"$i; done >> /etc/securetty
>>
- для добавления вывода в файл
>
- для прямого вывода в файл (перезапись)
решение2
Кстати, если вы хотите добавить кконецсуществующего файла, что-то вроде этого, вам не нужны ни sed, ни цикл оболочки. Это всего лишь одна команда:
$ printf '%s\n' "pts/"{0..10} >> /etc/securetty
Если вы хотите вставить вначалофайла, вы все еще можете сделать это с помощью printf:
$ cat file1
europe|EU
australia|AU
china|CN
$ printf '%s\n%s\n' "pts/"{0..10} "$(<file1)"
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9
pts/10
europe|EU
australia|AU
china|CN
Вы можете заменить содержимое вашего файла /etc/securetty
следующим образом (даже sed -i
выполняет ту же самую работу за кулисами):
$ printf '%s\n%s\n' "pts/"{0..10} "$(</etc/securetty)" > tmpsecure && mv -f tmpsecure /etc/securetty
Альтернатива:
$ { printf '%s\n' "pts/"{0..10}; cat /etc/securetty; } > tmpsecure && mv -f tmpsecure /etc/securetty
# Or
# cat <(printf '%s\n' "pts/"{0..10}) /etc/securetty > tmpsecure && mv tmpsecure /etc/securetty
решение3
Должен быть:
sed -i 'a pts/0\npts/1\npts/2\npts/3\npts/4\npts/5\npts/6\npts/7\npts/8\npts/9' /etc/securetty
В качестве альтернативы вы можете поместить содержимое в файл и использовать read (r)
опцию sed для добавления к целевому файлу.
Пример:
$ cat input.txt
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9
$ cat /etc/securetty
This is a dummy file
Команда:
sed -i 'r input.txt' /etc/securetty
Файл /etc/securetty
изменен следующим образом:
$ cat /etc/securetty
This is a dummy file
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9