* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}} тогда был быстрый ответ, который сработал и получил много голосов. Затем, когда вопрос стал более популярным и прошло больше времени, возмущенные люди начали сообщать, что это, конечно, работает, но могут случиться странные вещи, или это просто не сработало, поэтому какое-то время яростно опускали голос. Такое веселье.
В решении используется точная реализация файловых дескрипторов в вашей системе, и, поскольку реализация существенно различается в зависимости от никса, его успех полностью зависит от системы, определенно непереносим, и на него не следует полагаться даже в отношении чего-то даже неопределенно важного.
Теперь, несмотря на все это, ответ был:
Создание другого файлового дескриптора для файла (exec 3<> yourfile
), следовательно, запись в него (>&3
), кажется, преодолевает дилемму чтения / записи в том же файле. У меня работает на 600К файлах с awk. Однако попытка использовать тот же трюк с помощью 'cat' не удалась.
Передача prepenage в качестве переменной в awk (-v TEXT="$text"
) преодолевает проблему буквальных кавычек, которая не позволяет выполнить этот трюк с помощью sed.
#!/bin/bash
text="Hello world
What's up?"
exec 3<> yourfile && awk -v TEXT="$text" 'BEGIN {print TEXT}{print}' yourfile >&3