LINUX.ORG.RU

Posix shell parse file


0

1

Дано: входной файл, файл инклуда. Во входном файле строка есть строка, которую необходимо заменить содержимым файла. Вопрос как? Сделал так:

#!/bin/sh
> final
while line=$(line)
do
        if [ ! `expr "$line" : ".*--INSERT_HERE.*"` -eq 0 ]
        then
                cat ins >>final
        else
                echo "$line" >>final;
        fi
done < sourcefile.txt
Но к сожалению line входит в состав linux-utils которого во многих ОС нет(либо находится в неизвестном пекейдже/порте), вообщем требует дополнительных телодвижений. Как бы это сделать что бы совсем совместимо было бы (понятно дело что винда здесь в счет не берется) и с линуксом и БСД всякие и т.д.

★★★★★

Последнее исправление: Jetty (всего исправлений: 1)
Ответ на: комментарий от arsi

Не катит, попробуй оценить результат для:

echo "line" > txt
echo "    spaces" >> txt
echo "nospaces" >> txt
echo " some spaces" >> txt

выполни

cat txt | while read line; do echo "$line"; done

cat txt | while line=$(line); do echo "$line"; done

Поймешь в чем разница

Jetty ★★★★★
() автор топика
Ответ на: комментарий от ananas

>for l in «`cat txt`»; do echo «$l»; done

А если txt-файлик с мульёном строк внутри? Не, тут потоковый awk будет самое то

yoghurt ★★★★★
()
Ответ на: комментарий от Jetty

> awk '/--#INSERTION_MARKER#/ {system(«cat insert.txt»)}; {print $0}' txt > result.txt

не заменит, только добавит

awk '/--#INSERTION_MARKER#/ {noprt=1; system(«cat insert.txt»)}; {if (noprt!=1) print $0; noprt=0}' txt > result.txt

ananas ★★★★★
()
Ответ на: комментарий от ananas

Да, спасибо, я в курсе что не заменит... Но в моем случае как раз то что нужно :) Т.к. мне во вставляемый тест приходилось всовывать такой же маркер(раньше), что бы повторно можно было бы добавить еще что-то

Jetty ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.