LINUX.ORG.RU

IFS="" разделитель полей

 


0

5

Может ли быть разделитель полей в случае переназначения переменной IFS, быть в виде комбинации символов, а не один символ? Например хочу разделитель запятая и за ней пробел IFS=", " На практике не канает, считает что используется два разных разделителя запятая И пробел.


Неа. Это именно список возможных символов-разделителей, а не их последовательность.

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

Ну это я уж понял, вопрос в том существует ли возможность использовать не один символ а комбинацию в рамках IFS?

karasic
() автор топика
Ответ на: комментарий от karasic

вопрос в том существует ли возможность использовать не один символ а комбинацию в рамках IFS?

Поправить софт который так неудобно для тебя интерпретирует IFS.

anonymous
()
Ответ на: комментарий от x905

x905, вопрос был, кажется про Баш, а не про АВК.

karasic, нет IFS — это именно перечень символов, но если известно, что в строке не бывает какого-то символа (табулятора, к примеру), то ничто не мешает сделать вот так:

$ s='foo bar, baz,bar, quux'
$ IFS=$'\t' read a b c <<< "${s//, /$'\t'}"
$ printf "%s\n" "$a" "$b"
foo bar
baz,bar
Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

Однако мне было бы интересно посмотреть на ваши реальные данные с разделителем запятая-пробел.

Пример, что я привел (foo bar, baz,bar, quux) мне кажется весьма натянутым, а если у вас там foo bar, baz, quux — так здесь разделитель просто запятая, а пробелы по обоим краям от нее могут быть расставлены опрятности для и их при разборе надо подрезать, а не учитывать.

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

Собственно строка, это вывод параметров сертификата ЭЦП с помощью утилиток криптопро, хотел разбить его на элементы параметр-значение, в два захода(сначала на элементы где параметр и значение это один элемент, а потом его разбивать уже на два по знаку равно), по факту я уж понял что разбивать по разделителю запятая и пробел - криво, т.к. в значении улицы, содержится так же запятая и пробел, т.е. нужно городить чтобы при разбивке значение заключенное в кавычки не разбивалось на два разных элемента если внутри есть разделитель. Буду разбивать по «=», а потом начальные и конечные пробелы и запятые подрезать.

Subject         : 1.2.643.5.1.5.2.1.2="#0C0A31312D312D332D303834", 1.2.643.5.1.5.2.1.1="#0C053637303438", OGRN=1046758341321, INN=006731048270, E=otdel48@r05.fssprus.ru, C=RU, S=Мухосранская область, L=Мухосрань, O=УФСКН России по Мухосранкой области, OU=Межрайонный отдел, CN=ot05048, STREET="Рублевское шоссе, д. 17, 1.2.840.113549.1.9.2="#0C2AD0A0D18FD0BFD0B0D0BBD0BED0B220D09ED0BBD0B5D0B320D0A1D0B5D180D0B3D0B5D0B5D0B2D0B8D187", T=Начальник отдела, I=О.С., G=Васо Арутюнович, SN=Пупкидзе

karasic
() автор топика
Ответ на: комментарий от karasic

Разбей регуляркой на строки и потом уже парси построчно.

$ cat 1.txt
1.2.643.5.1.5.2.1.2="#0C0A31312D312D332D303834", 1.2.643.5.1.5.2.1.1="#0C053637303438", OGRN=1046758341321, INN=006731048270, E=otdel48@r05.fssprus.ru, C=RU, S=Мухосранская область, L=Мухосрань, O=УФСКН России по Мухосранкой области, OU=Межрайонный отдел, CN=ot05048, STREET="Рублевское шоссе, д. 17", 1.2.840.113549.1.9.2="#0C2AD0A0D18FD0BFD0B0D0BBD0BED0B220D09ED0BBD0B5D0B320D0A1D0B5D180D0B3D0B5D0B5D0B2D0B8D187", T=Начальник отдела, I=О.С., G=Васо Арутюнович, SN=Пупкидзе
$ sed -r 's/(([^,"]|("[^"]*"))+), */\1\n/g' < 1.txt
1.2.643.5.1.5.2.1.2="#0C0A31312D312D332D303834"
1.2.643.5.1.5.2.1.1="#0C053637303438"
OGRN=1046758341321
INN=006731048270
E=otdel48@r05.fssprus.ru
C=RU
S=Мухосранская область
L=Мухосрань
O=УФСКН России по Мухосранкой области
OU=Межрайонный отдел
CN=ot05048
STREET="Рублевское шоссе, д. 17"
1.2.840.113549.1.9.2="#0C2AD0A0D18FD0BFD0B0D0BBD0BED0B220D09ED0BBD0B5D0B320D0A1D0B5D180D0B3D0B5D0B5D0B2D0B8D187"
T=Начальник отдела
I=О.С.
G=Васо Арутюнович
SN=Пупкидзе
Deleted
()
Ответ на: комментарий от karasic

чтобы при разбивке значение заключенное в кавычки не разбивалось на два разных элемента

Да в общем-то не великая проблема, только у вас пример некорректный — в районе STREET несбалансированы эти самые кавычки.

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