2014-10-18 5 views
1

У меня есть файл list.dat, в котором у меня есть имена 100 file.txt:Баша: изменить имя файла с помощью списка

file1.ic 
file2.ic 
file3.ic 
... 
file100.ic 

Я хочу, чтобы прочитать этот файл и изменить внутри program.f90 имя этого файла итеративно. У меня есть все файлы в том же каталоге. Мой файл Баш:

#!/bin/bash 

    touch list.dat 

    input='file.in' 
    find . -type f -mtime +15 > list.dat 
    for G in $(cat list.dat) 
    do 
    sed -i "48s/$input/$G/" program.f90   
    input=$G 
    done 

Но я получаю следующее сообщение об ошибке:

sed: expression -e #1, character 14: option of s unknown.

Не могли бы вы мне помочь? большое спасибо !

+0

Я полагаю, ваши имена файлов в '$ input' или' $ G' содержат недопустимых символы. – Cyrus

+0

Мой файл на входе - «file.in» и имеет только числа. –

ответ

2

Это потому, что find по умолчанию выводит путь к файлу вместо имени файла (например: ./file1.ic).
Когда Баш расширяет вашу команду sed, это приводит:

sed -i "48s/file.in/./file1.ic/" program.f90 

..И вариант с неизвестной бы file1.ic/


Я бы сделать это таким образом. Вы можете изменить : для любого символа, не основанный на любом выходе имени файла по find:

input='file.in' 
while read -r G; do 
    sed -i "48s:$input:$G:" program.f90 
    input=$G 
done < <(find . -type f -mtime +15) 
Смежные вопросы