Цитата из https://superuser.com/questions/72226/linux-live-cd-for-distributed-computing-projects
Dotsch / UX один.
Dotsch / UX - USB / бездисковый / жесткий диск BOINC Ubuntu Linux Distribution
Цель состоит в том, чтобы создать дистрибутив Linux для BOINC, который легко устанавливается и загружается с USB-накопителя, жесткого диска и бездисковых клиентов , а также имеет несколько интерфейсов для автоматической настройки бездискового сервера и клиентов .
Клиент BOINC: Клиент BOINC поставляется предварительно установленным и запускается как демон , и этот демон будет отслеживать и поддерживать в рабочем состоянии. Dotsch / UX 1.0 включает клиент BOINC 6.2.15. Dotsch / UX 1.1 включает клиент BOINC 6.4.5 для поддержки CUDA.
Используйте grep -n
для извлечения номера строки, затем используйте его в адресе sed для вставки текста, который должен быть правильно заключен в кавычки, т. е. перед каждой новой строкой должна быть обратная косая черта:
line=$(grep -n '# My Search' myfile.txt | tail -n1 | cut -f1 -d:)
((--line))
text=${TEXT//$'\n'/$'\\\n'}
text=${text%$'\\\n'}$'\n'
sed "$line i \\
$text" myfile.txt
tac
+bash
(замена переменных )+ подход GNUsed
:
txt_reversed=$(echo "$TEXT" | tac)
tac myfile.txt \
| sed -e "N;N;N; s~#\n# My Search\n#~&${txt_reversed//$'\n'/\\n}\n~" | tac
Выход:
text1
text2
#
# My Search
#
text4
text5
[my search]
home=/var/home
string=random
#
# My Search
#
text6
Самый простой способ сделать это за один раз — использовать инструмент, который может выполнять поиск в обратном направлении, ed
— один из них. В идеале вы должны сохранить текст в файле (, например.insert.txt
)и вставьте содержимое файла за две строки до последнего вхождения PATTERN
, чтобы вы могли запустить:
ed -s infile <<\IN
.t.
?PATTERN?-2r insert.txt
$d
,p
q
IN
Он находит последнее вхождение PATTERN
, поднимается еще на 2
строк и r
читает в insert.txt
. Затем он печатает содержимое буфера через ,p
. Замените его на w
, если вы хотите отредактировать файл на месте -.
С другими инструментами, которые не могут выполнять поиск назад, можно использовать два -прохода :1-й проход -получить номер строки, а 2-й проход -вставить текстовое содержимое после строки NR-2
или перед строкой NR-1
. Для текста, сохраненного в переменной, я предпочитаю awk
другим инструментам, которые полагаются на регулярные выражения (последние требуют предварительной -обработки текста, который будет вставлен, чтобы избежать любых специальных символов :есть несколько инструментов, которые требуют экранирование, а не только новой строки, в зависимости от используемой техники):
export TEXT
awk 'NR==FNR{if ($0 ~ /PATTERN/){c=NR};next}
{if (FNR==(c-1)){print ENVIRON["TEXT"]}};1' infile infile
Мой первый вклад в stackExchange.
Вот как вставить строку с sed
перед последним совпадением.
sed -e '/PATTERN[^\n]*/,$!b;//{x;//p;g};//!H;$!d;x;iTEXTOINSERT' FILE
Вот как вставить строку с sed
перед первым совпадением.
sed -i -e '/PATERN/{a\\TEXTOINSERT' -e ':a;n;ba}' FILE
С уважением!