|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Kirill Nuzhdin 2:5020/400 27 Apr 2005 15:30:21 To : Kirill Nuzhdin Subject : Re: Замена по тексту --------------------------------------------------------------------------------
Kirill Nuzhdin wrote:
> Dmytro Rud wrote:
>
>> Eugene Grosbein <Eugene.Grosbein@f1.n5006.z2.fidonet.org> writes:
>>
>>
>>> RNA> Как мне заменить строку (hex) 0D 5C 0A (то есть \r\\\n) на (hex)
>>> RNA> 5C 72 (литерал "\r")?
>>>
>>> awk -v RS='' '{gsub(/\r\\\n/,"\\r"); print}'
>>
>>
>>
>> Когда символы 0D 5C 0A -- последние байты в файле или когда за ними идёт
>> n символов 0A, то они почему-то не заменяются (а хвост из символов 0A --
>> отрезается). Штатный awk из 5.3 и gawk из портов ведут себя в этом
>> отношении одинаково. Поведение gawk исправляется установкой переменной
>> RS в символ, о котором известно, что его не может быть в тексте
>> (например, '\0') и до кучи -- переменной ORS в '', чтобы в конце не
>> выводился лишний '\n'. Что делать со штатным awk -- я не нашёл.
>>
>
> книжка по гавку:
>
> "Advanced Notes: RS = "\0" Is Not Portable
> ...
> All other awk implementations store strings internally as C-style
> strings. C strings use the NUL character as the string terminator. In
> effect, this means that RS = "\0" is the same as RS = "". (d.c.)"
>
> а почему нельзя сделать, например, так:
>
> awk 'BEGIN{RS="\r\n"} 1' filename
>
сорри, неправильно прочитал что нужно
awk 'BEGIN{RS="\r\\\n"; ORS="\\r"} 1' filename
--
Best regards,
Kirill Nuzhdin
--- ifmail v.2.15dev5.3
* Origin: MSU (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/6577abad9e44.html, оценка из 5, голосов 10
|