2016-04-20 3 views
0

Я пытаюсь отсканировать текст, но только некоторые аспекты каждой строки.Ошибка BASH при выполнении строковых манипуляций

Вот мой код:

#!/bin/bash 
while IFS='' read -r line || [[ -n "$line" ]]; do 
echo $line 
destdir=/home/sample.txt 
#echo $destdir 
#want=${line:3:51} 

if [ -f "$destdir" ] 
then 
echo "${line:3:51}" > "$destdir" 

done < "$1" 

Я хочу читать file.txt и выводить только строки, начинающиеся на 3-й символ, оканчивающиеся на 54-й символ, и добавить в конец файла, sample.txt. Я в настоящее время получаю эту ошибку:

line 11: syntax error near unexpected token `done' 
line 11: `done < "$1"' 

Любые предложения?

ответ

1

Вы пропускаете fi ключевое слово, чтобы прекратить if заявление:

if [ -f "$destdir" ] 
then 
    echo "${line:3:51}" > "$destdir" 
fi 

Однако это лучше сделать с одним вызовом cut:

cut -c 3-51 "$1" > /home/sample.txt 
+0

Так пропустить эти 4 строки в целом, и придерживаться этой одной линией? – user6230466

+0

Пропустите весь цикл 'while' в пользу этой одной строки. – chepner

+0

Если я избавлюсь от всего цикла, у меня есть только одна строка, с которой я в порядке. Однако sample.txt говорит мне, что он не может этого сделать - разрешение отклонено. У меня есть chmod + x, и все равно ничего – user6230466

Смежные вопросы