Обработка строк файла

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
m0ps
лейтенант
Сообщения: 986
Зарегистрирован: 2008-05-08 20:18:06
Откуда: Chernigov (Ukraine)
Контактная информация:

Обработка строк файла

Непрочитанное сообщение m0ps » 2012-05-31 10:56:57

Значит появилась следующая задача:
есть файл, следующего вида:

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

First String    ^M
Second String^M
Another ^M
Нужно передать его содержимое в переменную построчно, обрезав лишние пробелы в конце и досовские переводы строки, преобразовав переменные следующим образом:

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

First\.String\.
Second\.String\.
Another\.
Собственно как построчно передать в переменную вопроса у меня не возникает, меня интересует как обрезать пробелы и удалить досовские переводы строк.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Bayerische
капитан
Сообщения: 1820
Зарегистрирован: 2010-12-25 20:41:50
Откуда: Хлебная столица

Re: Обработка строк файла

Непрочитанное сообщение Bayerische » 2012-05-31 11:19:54

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

 sed 's/\^M//'

Аватара пользователя
m0ps
лейтенант
Сообщения: 986
Зарегистрирован: 2008-05-08 20:18:06
Откуда: Chernigov (Ukraine)
Контактная информация:

Re: Обработка строк файла

Непрочитанное сообщение m0ps » 2012-05-31 11:27:20

Bayerische писал(а):

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

 sed 's/\^M//'
и? чем мне это должно помочь? окончание строки я могу и через dos2unix пофиксить

Bayerische
капитан
Сообщения: 1820
Зарегистрирован: 2010-12-25 20:41:50
Откуда: Хлебная столица

Re: Обработка строк файла

Непрочитанное сообщение Bayerische » 2012-05-31 11:34:22

меня интересует как обрезать пробелы и удалить досовские переводы строк

Bayerische
капитан
Сообщения: 1820
Зарегистрирован: 2010-12-25 20:41:50
Откуда: Хлебная столица

Re: Обработка строк файла

Непрочитанное сообщение Bayerische » 2012-05-31 11:44:29

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

tr -s " " | tr -d ' '
удаляет все пробелы

Аватара пользователя
m0ps
лейтенант
Сообщения: 986
Зарегистрирован: 2008-05-08 20:18:06
Откуда: Chernigov (Ukraine)
Контактная информация:

Re: Обработка строк файла

Непрочитанное сообщение m0ps » 2012-05-31 11:57:15

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

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Обработка строк файла

Непрочитанное сообщение kpp » 2012-05-31 12:18:23

Можно так:

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

tr -s "\r" "\n" < file_in | sed 's/ \{2,\}/ /g; s/\(^.*[^ ]\)$/\1 /; s/ /\\\./g'
или так:

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

tr -s "\r" "\n" < file_in | tr -s "[ ]" | sed 's/\(^.*[^ ]\)$/\1 /; s/ /\\\./g'
где

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

tr -s "\r" "\n" < file_in
можно заменить на

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

cat file_in | tr -s "\r" "\n"
В результате выполнения

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

sed 's/\^M//'
ничего не изменится, символы переводов строк не удалятся.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Обработка строк файла

Непрочитанное сообщение kpp » 2012-05-31 12:27:44

Можно укоротить:

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

tr -s "\r" " \n" < file_in | sed 's/ \{2,\}/ /g; s/ /\\\./g'

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

tr -s "\r" " \n" < file_in | tr -s " " | sed 's/ /\\\./g'
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
m0ps
лейтенант
Сообщения: 986
Зарегистрирован: 2008-05-08 20:18:06
Откуда: Chernigov (Ukraine)
Контактная информация:

Re: Обработка строк файла

Непрочитанное сообщение m0ps » 2012-05-31 13:38:08

kpp писал(а):Можно укоротить:

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

tr -s "\r" " \n" < file_in | sed 's/ \{2,\}/ /g; s/ /\\\./g'

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

tr -s "\r" " \n" < file_in | tr -s " " | sed 's/ /\\\./g'
спасибо, это уже близко к тому что мне надо.
единственная проблема - последняя строка должна быть пустая, это как-то можно обойти?

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Обработка строк файла

Непрочитанное сообщение kpp » 2012-05-31 13:46:49

Имеется в виду, что в исходном файле после последней строки нет перевода строки?

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

First String    ^M
Second String^M
Another 
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
m0ps
лейтенант
Сообщения: 986
Зарегистрирован: 2008-05-08 20:18:06
Откуда: Chernigov (Ukraine)
Контактная информация:

Re: Обработка строк файла

Непрочитанное сообщение m0ps » 2012-05-31 13:49:36

исходный файл создается под виндой.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Обработка строк файла

Непрочитанное сообщение kpp » 2012-05-31 13:54:35

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

tr -s "\r" " \n" < vhod2 | sed 's/\(^..*$\)/\1 /; s/ \{2,\}/ /g; s/ /\\\./g'
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.