2015-04-21 2 views
1

Я прочитал несколько тем о извлечении некоторых частей из имени файла, но по-прежнему не могу решить мою проблему. Есть некоторые файлы с именем aa - bb.txt, cc - dd.txt, ee - ff.txt и т.д. И последняя строка в каждом файле, как это:Извлечь часть из имени файла как переменной

somewordbbaa 

для aa - bb.txt и cc - dd.txt является:

somewordddcc 

Тогда в ee - ff.txt является:

somewordffee 

I wan t написать сценарий оболочки для удаления bbaa, ddcc, ffee в последней строке соответствующего файла. Я попытался следующие:

#!/bin/bash 
for file in *.txt 
do 
    artist=`echo $file | awk -F'[ .]' '{print $1}'` 
    name=`echo $file | awk -F'[ .]' '{print $3}'` 
    echo $artist >> artist 
    echo $name >> name 
    sed -i "s/$name$artist//" $file 
done 

И после того, как я бежал, он бросил это

sed: can't read aa: No such file or directory 
sed: can't read -: No such file or directory 
sed: can't read bb.txt: No such file or directory 
sed: can't read cc: No such file or directory 
sed: can't read -: No such file or directory 
sed: can't read dd.txt: No such file or directory 
sed: can't read ee: No such file or directory 
sed: can't read -: No such file or directory 
sed: can't read ff.txt: No such file or directory 

Я также попытался это

#!/bin/bash 
ls *.txt | sed 's/\.txt//' > full_name 
cut -f1 -d" " full_name > artist 
cut -f3 -d" " full_name > name 

for file in `ls -1 *.txt`, item1 in artist, item2 in name #Is this right? 
do 
    tail -n -1 $file | sed 's/$item2$item1//' > $file.last #just the last line 
done 

Он просто показал это и не было никакой реакции до нажатия Ctrl + c

tail: cannot open `aa' for reading: No such file or directory 

Я думаю, что Баш ставит пробел в имени файла в качестве разделителя, читает $file как aa, -, bb.txt.

Может ли кто-нибудь дать мне совет?

ответ

1

Поскольку ваши файлы имеют место в имени, попробуйте свой оригинальный сценарий, но изменить эту строку:

sed -i "s/$name$artist//" $file

к этому:

sed -i "s/$name$artist//" "$file"

+0

Ой, она любит magic.Thank вы. – dothacker