LINUX.ORG.RU
ФорумAdmin

Кавычки в данных из файла. Bash

 


0

1

Есть такая проблема. В файле куча данных разделенные точкой с запятой.

Некоторые данные имеют кавычки. При попытке экранировать или удалить кавычки во время работы с массивами нечего не получается.

clear_fync()	
{
	local DATA=$1
	echo "$DATA" | sed 's/"//g' | sed "s/'//g"
}

Но не получаться только если за файла я получаю перемменную. Если просто сделать так:

clear_fync()	
{
	local DATA=$1
	echo "$DATA" | sed 's/"//g' | sed "s/'//g"
}

TEST='"Газпром експорт" ТзОВ'
clear_fync $TEST
То все получаться.

можете подсказать, для работы с данными из файлов надо как то по другому их обрабатывать?


ничего не понял.
что именно надо?
удалить или экранировать?
покажи хоть что надо

echo '"Газпром експорт" ТзОВ' | tr -d "\"'"
Газпром експорт ТзОВ
не это?

megabaks ★★★★ ()
Последнее исправление: megabaks (всего исправлений: 1)
[ megabaks@desktop ] ~ $ echo '"Газпром експорт" ТзОВ' > file_lor
[ megabaks@desktop ] ~ $ while read line;do tr -d "\"'" <<< "${line}";done < file_lor 
Газпром експорт ТзОВ
[ megabaks@desktop ] ~ $ 

не?

megabaks ★★★★ ()

Есть такая проблема. В файле куча данных разделенные точкой с запятой.


Это НЕ проблема, это просто превосходно на самом деле.

Некоторые данные имеют кавычки.

Ну... бывает

При попытке экранировать или удалить кавычки во время работы с массивами нечего не получается.

Ммм...

while read -r line
 unset arr
 declare -a arr
 line=${line//[\"\']/}
 IFS=';' read -a arr <<<"$line"
 echo ${a[1]}
done

DRVTiny ★★★★★ ()

данных разделенные
нечего не получается
clear_fync()
перемменную
То все получаться
как то по другому

КЛБ

Deleted ()
Ответ на: комментарий от DRVTiny

большое всем спасибо!

использовал вариант с

line=${line//[\"\']/}
Но я бы хотел бы узнать почему у меня это не работает?

macik ()

lol:D
Надо cat а не echo

Читаешь файл и режешь кавычки седом

Например:
#!/bin/bash
FILE=«/home/user/ololo»
for i in \" \' ;do
sed -i 's/$i//g' $FILE
done
echo Done!

ubuntuawp ★★ ()
Ответ на: комментарий от ubuntuawp

Да уж, начинающие shell-писатели такие начинающие :) В смысле, что этот вариант с for намного хуже того, что пытался сделать автор, а в одинарных кавычках интерполяция не работает, так что работать он просто не будет.

DRVTiny ★★★★★ ()
Последнее исправление: DRVTiny (всего исправлений: 1)

ну у тебя вот что получается:

data=«filename» echo $data # на выходе получишь filename

дальше ты именно слово filename перенаправляешь по конвееры в sed

вообще может сработает вот так

func()
{
    sed -i 's/\'//g' $1 ; sed -i 's/"//g' $1
}
anonymous ()
Ответ на: комментарий от leader32

Не ну а че? Норм xDDDD
Зато работает
Если смотреть в файл а не куда то
Я на седом писать не умею
Токо баш знаю
Можно еще awk задействовать... Но думаю не стоит))

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