Я прочитал несколько тем о извлечении некоторых частей из имени файла, но по-прежнему не могу решить мою проблему. Есть некоторые файлы с именем 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
.
Может ли кто-нибудь дать мне совет?
Ой, она любит magic.Thank вы. – dothacker