Страница 1 из 1

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

Добавлено: 2012-05-31 10:56:57
m0ps
Значит появилась следующая задача:
есть файл, следующего вида:

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

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

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

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

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

Добавлено: 2012-05-31 11:19:54
Bayerische

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

 sed 's/\^M//'

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

Добавлено: 2012-05-31 11:27:20
m0ps
Bayerische писал(а):

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

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

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

Добавлено: 2012-05-31 11:34:22
Bayerische
меня интересует как обрезать пробелы и удалить досовские переводы строк

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

Добавлено: 2012-05-31 11:44:29
Bayerische

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

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

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

Добавлено: 2012-05-31 11:57:15
m0ps
неужели сложно посмотреть на пример исходного файла и результата что бы не предлагать то, чего не требуется

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

Добавлено: 2012-05-31 12:18:23
kpp
Можно так:

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

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//'
ничего не изменится, символы переводов строк не удалятся.

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

Добавлено: 2012-05-31 12:27:44
kpp
Можно укоротить:

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

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

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

tr -s "\r" " \n" < file_in | tr -s " " | sed 's/ /\\\./g'

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

Добавлено: 2012-05-31 13:38:08
m0ps
kpp писал(а):Можно укоротить:

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

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

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

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

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

Добавлено: 2012-05-31 13:46:49
kpp
Имеется в виду, что в исходном файле после последней строки нет перевода строки?

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

First String    ^M
Second String^M
Another 

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

Добавлено: 2012-05-31 13:49:36
m0ps
исходный файл создается под виндой.

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

Добавлено: 2012-05-31 13:54:35
kpp

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

tr -s "\r" " \n" < vhod2 | sed 's/\(^..*$\)/\1 /; s/ \{2,\}/ /g; s/ /\\\./g'