Как вставить содержимое файла в каждый из списка файлов?

У меня была аналогичная проблема. Я не уверен, что единственное обходное решение, которое я нашел, будет работать для вас, но стоит попробовать.

Я переключаюсь на tty1 (Ctrl + Alt + F1) и регистрируюсь, что, надеюсь, вы можете сделать , Если вы не можете даже переключиться, ваша проблема будет хуже моей! Но, предполагая, что вы так далеко дошли, я обнаружил, что перенос компьютера на спящий режим и возвращение его обратно по крайней мере заставляет компьютер реагировать снова. Это действительно не идеальное решение. Но для этого

cd /etc/acpi
sudo ./sleep.sh

После этого просто нажмите кнопку питания, чтобы вернуть его. Если вы вернетесь к графическому терминалу ( Ctrl + Alt + Alt ), все может снова реагировать.

Не идеально, но это лучше, чем полный перезапуск особенно если у вас есть важные вещи, которые еще не были сохранены.

Я еще не нашел, что вызывает это, иначе может возникнуть надежда на лучшее решение. Кто-то из потока, с которым я связался, предположил, что gnome-screen-saver вызывает проблемы, но убивает его после замораживания, ничего не исправить и убить его в начале сеанса не помешало мне заморозить. [!d11 ]

0
задан 16 November 2017 в 15:40

2 ответа

Вместо того, чтобы читать файл в переменной и вставлять это содержимое с помощью команды i (которая не будет работать для определенных случаев, таких как сбой, содержащий новые строки / им нужно будет получить экранирование), вы должны использовать команду r для добавьте текст напрямую:

for name in $(cat /home/stuff/list); do sed -i "27r /home/stuff/test" $name done

Чтобы избежать проблем с обратными окнами, было бы лучше использовать:

while read -r name; do sed -i "27r /home/stuff/test" "$name" done < /home/stuff/list

Или проще:

xargs -rd '\n' -- sed -i "27r /home/stuff/test" < /home/stuff/list
1
ответ дан 18 July 2018 в 11:15

Вместо того, чтобы читать файл в переменной и вставлять это содержимое с помощью команды i (которая не будет работать для определенных случаев, таких как сбой, содержащий новые строки / им нужно будет получить экранирование), вы должны использовать команду r для добавьте текст напрямую:

for name in $(cat /home/stuff/list); do sed -i "27r /home/stuff/test" $name done

Чтобы избежать проблем с обратными окнами, было бы лучше использовать:

while read -r name; do sed -i "27r /home/stuff/test" "$name" done < /home/stuff/list

Или проще:

xargs -rd '\n' -- sed -i "27r /home/stuff/test" < /home/stuff/list
1
ответ дан 24 July 2018 в 19:45
  • 1
    Два (теперь удаленных) ответа предложили одно и то же. – muru 24 August 2017 в 09:31
  • 2
    Что ты пытаешься мне сказать? Я не копировал свой ответ. Я даже не помню других ответов. – Philippos 24 August 2017 в 09:47
  • 3
    О, я не подразумевал, что вы скопировали (FWIW, я поддержал этот ответ). Меня просто забавляло, что два пользователя предложили то же самое месяц назад, затем удалили свои ответы, затем вы пришли, а также предложили r. История повторяется? [D0] i.stack.imgur.com/cWM5G.png – muru 24 August 2017 в 09:52
  • 4
    Понимаю. Хорошо, r является очевидным решением для этого. Мне просто интересно, почему другие удалили правильные ответы. И вообще OP заботится. – Philippos 24 August 2017 в 09:56
  • 5
    @DavidFoerster Спасибо за это редактирование – Philippos 16 November 2017 в 15:59

Другие вопросы по тегам:

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