LINUX.ORG.RU

Помогите со скриптом

 ,


0

1

Привет. Не могу написать скрипт, который бы заменял шаблонную строку в файле на заданную.

Делаю так:

#!/bin/bash

declare sources=$(find . -type f -name "*.cpp" | awk '{print substr($0,3)}')

echo "$sources"

sed -i 's/_SRC_LIST_/'"$sources"'/g' sources.txt

Может ошибка в том, что в $sources есть переводы строк и пробелы?



Последнее исправление: beastie (всего исправлений: 3)
#!/bin/bash

echo '1
2
3
_SRC_LIST_
4
_SRC_LIST_
5
6' >1.txt

source='q
w e r
t'

source=$(printf "%q" "$source")
sed -i "s/_SRC_LIST_/${source:2:-1}/g" 1.txt

cat 1.txt
anonymous
()
Ответ на: комментарий от pef-secure

То, что я нагуглил, везде советуют сед. Я команду исправил на другие разделители, т.к. слэши содержались в имени файлов и убрал переводы строк.

sources=$(echo "$sources" | tr '\n' ' ')
sed -i "s|_SRC_LIST_|" "$sources" "|g" sources.txt
Но там ошибка «unterminated `s' command» все равно.

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

или, как выше советовали, awk:

#!/bin/bash

echo '1
2
3
_SRC_LIST_
4
_SRC_LIST_
5
6' >1.txt

source='q
w e r
t'

awk -v s="$source" '{
  gsub(/_SRC_LIST_/, s)
}1' 1.txt

anonymous
()

ох, ппц.

sed -n '/_SRC_LIST_/{s//find -type f/ep;b};p'

эо если много раз find выполнять. Если не хочешьмного раз, то надо юзать временный файл

TMP=`mktemp`; find  -type f >$TMP; sed -n -e '/_SRC_LIST_/{r'$TMP -e 'b};p' 1.txt; rm --force $TMP

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