Bash форматирование и замена куска текста... (Заменить и немного отредактировать текст в строках)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
Gang
Сообщения: 106

Bash форматирование и замена куска текста...

Сообщение Gang »

Всем привет!
Народ подсобите скриптик написать, нужно завтра к утру, а работы куча!
В общем, что нужно:
есть куча файла такого формата:

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

11111 45 АА i+g 7H 1500 +- 50 1500 +- 50 1500 +- 50 1500 +- 50...
11111 45 АА i+g 7H 1500 +- 50 1500 +- 50 1500 +- 50 1500 +- 50...
...

Вот файликов очень много и они очень большие порядка 100х100. Разделены все поля !пробелами! (Цифры и обозначения естественно все разные ;) )
Нужно просто заменить +- на скобки и следующее за ними число заключить в скобки типа такого:

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

11111 45 АА i+g 7H 1500 (50) 1500 (50) 1500 (50) 1500 (50)...
11111 45 АА i+g 7H 1500 (50) 1500 (50) 1500 (50) 1500 (50)...
...

Сам я сделал только замену +-, при помощи седа и то не понял как стереть пробел и "засунуть" след. число в скобки...
Подсобите кто может! Очень нужно, а разбираться времени нет совсем...
Заранее благодарен!
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Bash форматирование и замена куска текста...

Сообщение sash-kan »

если нужен именно sed. а не bash, как в заголовке темы:

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

sed 's/+- *\([[:digit:]]*\) /(\1) /g'
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Gang
Сообщения: 106

Re: Bash форматирование и замена куска текста...

Сообщение Gang »

sash-kan писал(а):
18.12.2007 11:14
если нужен именно sed. а не bash, как в заголовке темы:

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

sed 's/+- *\([[:digit:]]*\) /(\1) /g'

Вообще пофиг на чес нужно, просто awk я вообще не помню...
А так спс ща попробую )
Спасибо сказали:
Аватара пользователя
Gang
Сообщения: 106

Re: Bash форматирование и замена куска текста...

Сообщение Gang »

sash-kan писал(а):
18.12.2007 11:14
если нужен именно sed. а не bash, как в заголовке темы:

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

sed 's/+- *\([[:digit:]]*\) /(\1) /g'

А что значит *\([[:digit:]]*\)? вроде что число должно следовать?
но она почему то не помещает его в скобки...
точнее не помещает последнее число с погрешностью....
Спасибо сказали:
Аватара пользователя
Gang
Сообщения: 106

Re: Bash форматирование и замена куска текста...

Сообщение Gang »

в общем проблемма в том что десятичные цифры она подставляет (кроме последней), а вот вещественные нет. Пробовал делать так:

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

sed -e 's/+- *\([[:digit:]]*\)/,/+- *\([[:digit:]]*\),*\([[:digit:]]*\)/{(\1) /g}' $filename > $filename2

пишет что неизвестный модификатор к s. Народ подсобите кто знает!
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Bash форматирование и замена куска текста...

Сообщение sash-kan »

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

$ echo '+-  50 +- 5.0 +- 5,0 +-' | sed 's/+- *\([[:digit:].,]*\) /(\1) /g;s/+- *$//'
(50) (5.0) (5,0)

а если еще и надо проверять правильность синтаксиса записи числа после «+-», то, я надеюсь, сами справитесь. в виде домашнего задания.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: Bash форматирование и замена куска текста...

Сообщение Folderx »

Пробовал покороче... короче надёжный вариант :crazy:

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

str="11111 45 АА i+g 7H 1500 +- 50 1500 +- 50 1500 +- 50 1500 +- 50..."


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

arr=($str); i=0
while [ $i -lt ${#arr[@]} ]
do
 [ ${arr[$i]} = "+-" ] && arr[$(($i+1))]="(${arr[$i+1]})" && arr[$i]=""
 let i++
done
str="${arr[@]}"


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

str="11111 45 АА i+g 7H 1500 (50) 1500 (50) 1500 (50) 1500 (50...)"
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Bash форматирование и замена куска текста...

Сообщение drBatty »

Gang писал(а):
18.12.2007 03:08
Нужно просто заменить +- на скобки и следующее за ними число заключить в скобки типа такого:

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

#!/bin/sed -rf
s/\+- ([0-9]+)/(\1)/g
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: