Функция Perl - unpack и bash

Модератор: Модераторы разделов

Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Функция Perl - unpack и bash

Сообщение Naruto-kun »

Есть определённый скрипт на perl. В нем есть часть, которая занимается тем, что считывает текстовый файл построчно, разбивает строку с помощью команды unpack и распихивает по переменным. Необходимо реализовать это с помощью баш-скрипта. Например есть строка: "11 22 33". Пробовал с помощью функции cut ( tmp=`echo $line | cut -bN-M` ). Но он воспринимает 2 пробела, как один символ. Мне же надо, чтоб один пробел - воспринимался как один символ. Подскажите пожалуйста, как это можно сделать, заранее благодарен.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Функция Perl - unpack и bash

Сообщение diesel »

Можешь более разумно как-то пример привести того что есть, и того что надо из этого получить? с пробелами совсем не понятно.
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Функция Perl - unpack и bash

Сообщение Naruto-kun »

Ну более разумно, только так.
Есть строка: 1 2 пробел№1 пробел№2 5 6 пробел№3 пробел№4 9 9

Код:

my $line="12 56 99"; my ($a,$b,$c,$d,$e)=unpack("A2 A2 A2 A2 A2",$line); print "$a\n"; # Здесь выведется : 12 print "$b\n"; # Здесь выведется : пусто (или 2 пробела) print "$c\n"; # Здесь выведется : 56 print "$d\n"; # Здесь выведется : пусто (или 2 пробела) print "$e\n"; # Здесь выведется : 99

Где пусто, он выводит пусто, что собственно, я так понимаю и есть 2 пробела.
А вот с башем проблемы, если воспользоватся функцией cut и таже самая строка то:

Код:

line="12 56 99" a=`echo $line | cut -b1-2` b=`echo $line | cut -b3-4` c=`echo $line | cut -b5-6` d=`echo $line | cut -b7-8` e=`echo $line | cut -b9-10` echo $a # Здесь выведется : 12 echo $b # Здесь выведется : 5 echo $c # Здесь выведется : 6 echo $d # Здесь выведется : 99 echo $e # Здесь выведется : пусто ( или два пробела)

А надо, чтобы процедура выполнялась, также как и на пёрле. Чтобы любой символ воспринимался как один символ. Это необходимо для корректного разбиеня строки по переменным. В баше же, как видно в случае с пробелами, возникает проблема, получается перекос.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Функция Perl - unpack и bash

Сообщение Rootlexx »

Naruto-kun
Используйте awk:

Код: Выделить всё

[rootlexx@localhost ~]$ echo "a b  c      d" | awk '{ print $3 }'
c
[rootlexx@localhost ~]$
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Функция Perl - unpack и bash

Сообщение diesel »

Rootlexx писал(а):
17.11.2008 18:05
Naruto-kun
Используйте awk:

Код: Выделить всё

[rootlexx@localhost ~]$ echo "a b  c      d" | awk '{ print $3 }'
c
[rootlexx@localhost ~]$

в том то и дело что $3 - должен быть пробел....

а почему бы не так:

Код: Выделить всё

diesel@indie:~/scripts/imapsync$ line='12  56  99'; a=`echo "$line" | perl  -e ' $_=<>; ($a,$b,$c,$d,$e)=unpack("A2 A2 A2 A2 A2",$_); print $a;' `; echo $a
12
diesel@indie:~/scripts/imapsync$ line='12  56  99'; a=`echo "$line" | perl  -e ' $_=<>; ($a,$b,$c,$d,$e)=unpack("A2 A2 A2 A2 A2",$_); print $b;' `; echo $a

diesel@indie:~/scripts/imapsync$ line='12  56  99'; a=`echo "$line" | perl  -e ' $_=<>; ($a,$b,$c,$d,$e)=unpack("A2 A2 A2 A2 A2",$_); print $c;' `; echo $a
56
diesel@indie:~/scripts/imapsync$ line='12  56  99'; a=`echo "$line" | perl  -e ' $_=<>; ($a,$b,$c,$d,$e)=unpack("A2 A2 A2 A2 A2",$_); print $d;' `; echo $a

diesel@indie:~/scripts/imapsync$ line='12  56  99'; a=`echo "$line" | perl  -e ' $_=<>; ($a,$b,$c,$d,$e)=unpack("A2 A2 A2 A2 A2",$_); print $e;' `; echo $a
99
diesel@indie:~/scripts/imapsync$
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Функция Perl - unpack и bash

Сообщение Naruto-kun »

Naruto-kun
Используйте awk:
Код
[rootlexx@localhost ~]$ echo "a b c d" | awk '{ print $3 }'
c
[rootlexx@localhost ~]$


Нет, это не подходит. Возможно я неккоректно выразился. Попробую ещё раз.
У меня есть строка 1 2 пробел№1 пробел№2 5 6 пробел№3 пробел№4 9 9.
Есть 5 переменных: a,b,c,d,e. Мне необходимо, чтобы он в a записал какое-то кол-во символов и соотвственно в оставшиеся переменные, тоже какое-то кол-во символов. Если считывая какое-то кол-во символов, я получаю, что они все пробелы, то получается, переменная не определена, нет для неё значения.Почему мне и нужно, чтобы один пробел считался как один символ.

Цитата(Rootlexx @ Nov 17 2008, в 17:05) *
Naruto-kun
Используйте awk:
Код
[rootlexx@localhost ~]$ echo "a b c d" | awk '{ print $3 }'
c
[rootlexx@localhost ~]$

в том то и дело что $3 - должен быть пробел....

а почему бы не так:

Код
diesel@indie:~/scripts/imapsync$ line='12 56 99'; a=`echo "$line" | perl -e ' $_=<>; ($a,$b,$c,$d,$e)=unpack("A2 A2 A2 A2 A2",$_); print $a;' `; echo $a
12
diesel@indie:~/scripts/imapsync$ line='12 56 99'; a=`echo "$line" | perl -e ' $_=<>; ($a,$b,$c,$d,$e)=unpack("A2 A2 A2 A2 A2",$_); print $b;' `; echo $a

diesel@indie:~/scripts/imapsync$ line='12 56 99'; a=`echo "$line" | perl -e ' $_=<>; ($a,$b,$c,$d,$e)=unpack("A2 A2 A2 A2 A2",$_); print $c;' `; echo $a
56
diesel@indie:~/scripts/imapsync$ line='12 56 99'; a=`echo "$line" | perl -e ' $_=<>; ($a,$b,$c,$d,$e)=unpack("A2 A2 A2 A2 A2",$_); print $d;' `; echo $a

diesel@indie:~/scripts/imapsync$ line='12 56 99'; a=`echo "$line" | perl -e ' $_=<>; ($a,$b,$c,$d,$e)=unpack("A2 A2 A2 A2 A2",$_); print $e;' `; echo $a
99
diesel@indie:~/scripts/imapsync$


хм, а здесь команда perl, я так понимаю является использование пёрла? Если да, то тоже не подходит. Мне нужно абсолютно независимый от пёрла скрипт.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Функция Perl - unpack и bash

Сообщение diesel »

Naruto-kun писал(а):
17.11.2008 18:17
Мне нужно абсолютно независимый от пёрла скрипт.

ну удачи :) а что кроме bash еще есть?
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Функция Perl - unpack и bash

Сообщение Naruto-kun »

Хм, вот сосбна используя баш. Без пёрла никак, не релизовать данную задачу?
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Функция Perl - unpack и bash

Сообщение diesel »

Naruto-kun писал(а):
17.11.2008 18:21
Хм, вот сосбна используя баш. Без пёрла никак, не релизовать данную задачу?


Код: Выделить всё

diesel@indie:~/scripts/imapsync$ line='12  56  99'; a=`echo "$line"|sed -e 's/^\([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9]*\)/\1/g'`; echo $a
12
diesel@indie:~/scripts/imapsync$ line='12  56  99'; a=`echo "$line"|sed -e 's/^\([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9]*\)/\2/g'`; echo $a

diesel@indie:~/scripts/imapsync$ line='12  56  99'; a=`echo "$line"|sed -e 's/^\([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9]*\)/\3/g'`; echo $a
56
diesel@indie:~/scripts/imapsync$ line='12  56  99'; a=`echo "$line"|sed -e 's/^\([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9]*\)/\4/g'`; echo $a

diesel@indie:~/scripts/imapsync$ line='12  56  99'; a=`echo "$line"|sed -e 's/^\([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9]*\)/\5/g'`; echo $a
99



или чтобы много раз много не писать:

Код: Выделить всё

diesel@indie:~/scripts/imapsync$ function getsub { echo "$1" | sed -e 's/^\([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9]*\)/\'$2'/g'; }
diesel@indie:~/scripts/imapsync$ getsub '12  56  99' 1
12
diesel@indie:~/scripts/imapsync$ getsub '12  56  99' 2

diesel@indie:~/scripts/imapsync$ getsub '12  56  99' 3
56
diesel@indie:~/scripts/imapsync$ getsub '12  56  99' 4

diesel@indie:~/scripts/imapsync$ getsub '12  56  99' 5
99
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Функция Perl - unpack и bash

Сообщение Naruto-kun »

Спасибо, попробую.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Функция Perl - unpack и bash

Сообщение Naruto-kun »

Покопался с предложенной вами функцией. Обнаружил, что использовать вашу функцию, будет для меня весьма проблематично, ибо файл с которым я работаю, состоит из строк, длиной ~151 символ. Длина переменных, на которые разбиваются строки, колеблется от 1 до 28 символа. В строках встречаются и цифры и буквы, иногда пробелы(собственно, в моём случае, значит не будет определена переменная). Может есть, другой способ, или всё таки просто разобраться с тем, что вы предложили, просто добавив в неё недостающие части строки?
ps. Единственное, что облегчает задачу, то что все строки разбиваются одинаково.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Функция Perl - unpack и bash

Сообщение diesel »

Naruto-kun писал(а):
18.11.2008 17:20
Покопался с предложенной вами функцией. Обнаружил, что использовать вашу функцию, будет для меня весьма проблематично, ибо файл с которым я работаю, состоит из строк, длиной ~151 символ.


Штука ведь не в длине собственно строки а в количестве полей.

Naruto-kun писал(а):
18.11.2008 17:20
Может есть, другой способ, или всё таки просто разобраться с тем, что вы предложили, просто добавив в неё недостающие части строки?

мну в голову ниче окромя как такой подстановки не приходит. то есть делать регексп описывающий строку разбитую на поля разделенные пробелом, и отдельные куски этого регеспа вырезать.
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Функция Perl - unpack и bash

Сообщение Naruto-kun »

Понятно. А если быть точным то строки длиной 151 символов делятся на 18 переменных.Чтобы было понятнее, вот разбиение на пёрле:

Код:

my ($linenum,$ntrx,$pan,$opctype,$trxsign,$trxsum,$trxcur,$feesum, $feecur,$feesign,dttrx,$tmtrx,$syst,$auth,$rez,$crdgrp,$ntrxp,$eqcod) =unpack("x3 A10 A12 A28 A3 A3 A15 A3 A15 A3 A3 A10 A8 A4 A6 A1 A4 A12 A8",$line);

Собственно, пока так и не смог преоброзовать ваш пример для этого случая. Не до конца разобрался в тонкостях sed. Щас вот сижу ковываряю. Если будут ещё какие-либо предложения, буду только рад.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Функция Perl - unpack и bash

Сообщение diesel »

Naruto-kun писал(а):
19.11.2008 12:06
Понятно. А если быть точным то строки длиной 151 символов делятся на 18 переменных.Чтобы было понятнее, вот разбиение на пёрле:

Код:

my ($linenum,$ntrx,$pan,$opctype,$trxsign,$trxsum,$trxcur,$feesum, $feecur,$feesign,dttrx,$tmtrx,$syst,$auth,$rez,$crdgrp,$ntrxp,$eqcod) =unpack("x3 A10 A12 A28 A3 A3 A15 A3 A15 A3 A3 A10 A8 A4 A6 A1 A4 A12 A8",$line);

Собственно, пока так и не смог преоброзовать ваш пример для этого случая. Не до конца разобрался в тонкостях sed. Щас вот сижу ковываряю. Если будут ещё какие-либо предложения, буду только рад.

там все просто, примерно тоже самое что и в перле:
sed -e 's/^\([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9]*\)/\'$2'/g'; }


"\([0-9]*\) " - строка состоящая из какого-то колличества цифр, за которой следует пробел. повторяется столько раз - сколько переменных - у тебя из 18 - значить надо 18. если не только цифры, а и буквы соответственно будет [0-9a-zA-Z].

"/\'$2'/" - второй элемент замены - $2 - это второй параметр функции, который передаеется sed'у чтобы получить \n, где n - номер скобочки который будет подставлен и выдан как исходный результат.
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Функция Perl - unpack и bash

Сообщение Naruto-kun »

Это я опытным путём вроде как понял. Но вот у меня же между переменными пробелов почти нет. Пробел в строке файла стоит только в том случае, если нет переменной.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Функция Perl - unpack и bash

Сообщение diesel »

Naruto-kun писал(а):
19.11.2008 12:24
Это я опытным путём вроде как понял. Но вот у меня же между переменными пробелов почти нет.

эм в изначальном примере с цифрами переменные разделялись пробелами и ежели переменной не было - то ее не было, а просто стоял еще один пробел. мну с перловыми pack/unpack никогда не сталкивался, поэтому что template означает сходу не понимаю.
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Функция Perl - unpack и bash

Сообщение Naruto-kun »

diesel писал(а):
19.11.2008 12:30
Naruto-kun писал(а):
19.11.2008 12:24
Это я опытным путём вроде как понял. Но вот у меня же между переменными пробелов почти нет.

эм в изначальном примере с цифрами переменные разделялись пробелами и ежели переменной не было - то ее не было, а просто стоял еще один пробел.


Простите, видимо я как всегда плохо объяснил. :blush:
Как уже сказал, пробел, только если нет переменной, т.е. вместо неё. Между переменными пробелов нет.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Функция Perl - unpack и bash

Сообщение Naruto-kun »

Всё вроде бы разобрался, по крайней мере работает.

Код:

function getsub { echo "$1" | sed -e 's/^\([0-9a-zA-Z ][0-9a-zA-Z ]\)\([0-9a-zA-Z ]\)\([0-9a-zA-Z ][0-9a-zA-Z ]\)/\'$2'/g'; } #function getsub { echo "$1" | sed -e 's/^\([0-9a-zA-Z][0-9a-zA-Z]\)\([0-9a-zA-Z][0-9a-zA-Z]\)/\'$2'/g'; } getsub '43 21' 1 # Выводит 43, что и нужно

Правда для строк длиной 151 символ получится длинная комманда. Всем кто помогал большое спасибо. Если кто-то предложит более лучший вариант буду благодарен.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Функция Perl - unpack и bash

Сообщение Naruto-kun »

Хмм, решил ещё раз попробовать на строке длиной 151 символ, получившююся функцию. Где-то видимо я ошибся.

Код:

line="3331111111111dghfgjsdgfsfg sdgfhsgfsfs fhsdgfjsguyrgtwytfbsdfjs fgsdhfgsuyfgsufgsdf gfdhsghfjsdy ysgfhsfguyguy yg fysgdfygsuyd fsgdyfgysgdyfggfhdgj" function getsub { echo "$line" | sed -e 's/^\([0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ]\)\([0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ] [0-9a-zA-Z][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ]\)\([0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ] [0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ]\)\([0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ] [0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ] [0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ]\) \([0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ]\)\([0-9a-zA-Z ][0-9a-zA-Z ] [0-9a-zA-Z ]\)\([0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ] [0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ]\) \([0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ]\)\([0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ] [0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ]\)\([0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ]\)\([0-9a-zA-Z ] [0-9a-zA-Z ][0-9a-zA-Z ]\)\([0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ] [0-9a-zA-Z ]\)\([0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ]\)\([0-9a-zA-Z ][0-9a-zA-Z ] [0-9a-zA-Z ][0-9a-zA-Z ]\)\([0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ]\)\([0-9a-zA-Z ]\)\([0-9a-zA-Z ][0-9a-zA-Z ] [0-9a-zA-Z ][0-9a-zA-Z ]\)\([0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ] [0-9a-zA-Z ][0-9a-zA-Z ]\)\([0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ]\)/\'$1'/g'; } getsub 1

Выводит ошибку: sed: command garbled
А насколько я понял, это означает, что я ошибся в выражении.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Функция Perl - unpack и bash

Сообщение diesel »

Naruto-kun писал(а):
19.11.2008 12:35
diesel писал(а):
19.11.2008 12:30
Naruto-kun писал(а):
19.11.2008 12:24
Это я опытным путём вроде как понял. Но вот у меня же между переменными пробелов почти нет.

эм в изначальном примере с цифрами переменные разделялись пробелами и ежели переменной не было - то ее не было, а просто стоял еще один пробел.


Простите, видимо я как всегда плохо объяснил. :blush:
Как уже сказал, пробел, только если нет переменной, т.е. вместо неё. Между переменными пробелов нет.

тогда так просто не будет работать и задача сильно усложнится.

ЗЫ: в вашем регекспе там еще надо учитывать "или символы или пробел".
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Функция Perl - unpack и bash

Сообщение Naruto-kun »

собсвтвенно я это учёл, сделав "[0-9a-zA-Z ]", насколько я понял, так я смогу учитывать пробел, на практике это работает. Но возникла трудность строчку длиной 77 символов я разбиваю нормально. Но вот длиной большей, проверял на 151 символе, выдаёт ошибку, собственно проверил ещё на длине 108, тоже ошибка. Может есть какое-то ограничения на длину команды sed, в смысле то что стоит в ' '
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Функция Perl - unpack и bash

Сообщение Naruto-kun »

Перекопал весь свой получившийся тестовый пример. Никаких вроде бы ошибок синтаксиса не нашёл.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Функция Perl - unpack и bash

Сообщение Naruto-kun »

Тема по прежнему актуальна. Решение так пока верное и не нашёл.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Функция Perl - unpack и bash

Сообщение Naruto-kun »

Всё проблема наконец решена. Я бы сказал это почти полная аналогия фукнции unpack в пёрле.

Код:

#!/bin/bash string="123 567e8" a=`echo ${string:0:3}` b=`echo ${string:3:2}` c=`echo ${string:5:5}` echo $a # Выведется 123 echo $b # Выведется 2 пробела echo $c # Выведтся 567e8

Собственно, именно то я так долго искал. Оказалось всё дествительно просто.
ps. Тему можно закрывать или удалять. Ещё раз спасибо всем, кто помог.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали: