Замена в файле 0х0А на 0х0D0A (как сделать?)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

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

Замена в файле 0х0А на 0х0D0A

Сообщение VAVka »

Вот озаботился сабжем. Помогите, с помощью чего можно сделать такую замену?
Может, sed поможет, или еще что?
С уважением, VAVka (VAVka pagе)

NimbleX 200 Mb USB Edition (krnl 2.6.24/2.4.22)
{XOrg 1.4.0/IceWM 1.2.35}
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: Замена в файле 0х0А на 0х0D0A

Сообщение flook »

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

cat file | sed -e 's/0x0A/0x0D0A/'

оно?
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Аватара пользователя
VAVka
Сообщения: 96

Re: Замена в файле 0х0А на 0х0D0A

Сообщение VAVka »

не, я имел ввиду замену символа конца строки (0x0A) на символы завершающий ноль - конец строки (0x0D0A).
С уважением, VAVka (VAVka pagе)

NimbleX 200 Mb USB Edition (krnl 2.6.24/2.4.22)
{XOrg 1.4.0/IceWM 1.2.35}
Спасибо сказали:
Аватара пользователя
nercus
Сообщения: 150

Re: Замена в файле 0х0А на 0х0D0A

Сообщение nercus »

я так понял, 0x0A - это значение 1 байта, а не 4 символа?
тогда перевести в base-8 и использовать \o в sed:
0x0A == 012
0x0D == 015

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

cat file|sed 's!\o012!\o015\o012!g'


запустить и удивиться "а почему оно не работает?".
а потом догадаться, что вопрос надо было ставить не "Замена в файле 0х0А на 0х0D0A, как сделать?" а что-то типа "Текстовые файлы Unix to dos"

nercus добавил в 17.06.2005 11:43

http://home.xnet.com/~efflandt/pub/dos2unix.pl

соответственно, unix2dos.pl будет выглядеть так:

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

#! /usr/bin/perl

# dos2unix.pl by David Efflandt <efflandt@xnet.com>
# Modification of script from "Learning perl" p.353
# O'Reilly & Associates, Inc.
#
# Run after transfering text files from DOS to UNIX system.
# Strips carriage returns from DOS files for use UNIX.
# Transfers file permissions to new file (except suid bit).
#
#       Usage:\tdos2unix.pl FILELIST
#       where FILELIST = one or more filenames
#
# If you edit this file in DOS you can run it on itself by typing:
#       perl dos2unix.pl dos2unix.pl
#
# Modify variables below for other search and replace functions.

$find = "\n";   # find this
$sub = "\r\n";  # substitute with this
$rm_bak = 1;    # remove old file after conversion: 0 = no, 1 = yes

while (<>) {
        if ($ARGV ne $oldargv) {
                ($dev,$ino,$mode,$nlink,$uid,$gid) = stat($ARGV);
                $backup = $ARGV . '.bak';
                rename($ARGV, $backup);
                open (ARGVOUT, ">$ARGV");
                chmod $mode, $ARGV;
                select(ARGVOUT);
                $oldargv = $ARGV;
        }
        s/$find/$sub/;
} continue {
        print;
        if (eof) {
                print STDOUT "Converted: $oldargv\n";
                unlink $backup if $rm_bak;
        }
}
select(STDOUT);


либо еще проще:

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

sed -i 's!$!\r!' somefile
2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Замена в файле 0х0А на 0х0D0A

Сообщение madskull »

Странные вы какие-то...
sed -i 's/$/\r/' file
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
VAVka
Сообщения: 96

Re: Замена в файле 0х0А на 0х0D0A

Сообщение VAVka »

nercus: Cовершенно верно. unix2dos. А для этого - "как заменить в файле 0х0А на 0х0D0A?" ;) Пмсм, вопрос поставлен точнее некуда: конкретика, мать ее так...

madskull: Cпасибо.

ЗЫ: madskull, почему бы Вам не написать что-нибудь, типа хау-ту или очерка на тему "Эффективное использование shell программирования", где коснуться sed, awk и регулярных выражений? Очень интересно и полезно было бы почитать в Вашей трактовке.
С уважением, VAVka (VAVka pagе)

NimbleX 200 Mb USB Edition (krnl 2.6.24/2.4.22)
{XOrg 1.4.0/IceWM 1.2.35}
Спасибо сказали:
Аватара пользователя
alv
Бывший модератор
Сообщения: 7275
Статус: Пенсионер в законе
ОС: Cintu

Re: Замена в файле 0х0А на 0х0D0A

Сообщение alv »

(VAVka @ Понедельник, 20 Июня 2005, 2:16) писал(а):ЗЫ: madskull, почему бы Вам не написать что-нибудь, типа хау-ту или очерка на тему "Эффективное использование shell программирования", где коснуться sed, awk и регулярных выражений? Очень интересно и полезно было бы почитать в Вашей трактовке.


пишется:
здесь
http://unix.ginras.ru/apps/sh009.html
и здесь
http://madskull.narod.ru/tips/
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Замена в файле 0х0А на 0х0D0A

Сообщение madskull »

(VAVka @ Понедельник, 20 Июня 2005, 2:16) писал(а):nercus: Cовершенно верно. unix2dos. А для этого - "как заменить в файле 0х0А на 0х0D0A?"  ;) Пмсм, вопрос поставлен точнее некуда: конкретика, мать ее так...

madskull: Cпасибо.

ЗЫ: madskull, почему бы Вам не написать что-нибудь, типа хау-ту или очерка на тему "Эффективное использование shell программирования", где коснуться sed, awk и регулярных выражений? Очень интересно и полезно было бы почитать в Вашей трактовке.

Я вот alv'у обещал аж цикл статей про баш-программинг... да не выходит.
Самому выдумывать проблемы, чтобы их рассусоливать не получается, а брать что-то из ежедневно употребляемых конструкций не получается из-за того, что если выдернуть какие-то красивые на мой взгляд решения из контекста, то они теряют красоту и смысл.

Так что я пока кидаю в tips, а там видно будет.

Кроме того, есть Advanced Bash Scripting Guide.
(Я было начал писать про использование строковых операций, а оказалось, что там это уже довольно неплохо описано. Да и в man bash все есть)
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
VAVka
Сообщения: 96

Re: Замена в файле 0х0А на 0х0D0A

Сообщение VAVka »

Ага, посмотрел чипсы. Могу только лишь в очередной раз поблагодарить, что находите время делиться ценным опытом.
Сам же пока сяду за Advanced Bash Scripting Guide, вроде там неплохо описаны разные финты и в качестве начальной точки изучения sh-скриптинга.
С уважением, VAVka (VAVka pagе)

NimbleX 200 Mb USB Edition (krnl 2.6.24/2.4.22)
{XOrg 1.4.0/IceWM 1.2.35}
Спасибо сказали: