LINUX.ORG.RU

bash замена спецсимволов

 ,


0

2

Доброго времени суток!

есть файл, в котором нужно символы 0D 0A (возврат каретки и перевод строки) заменить на ';', а 0D 0A 0D 0A на '\n'. пробовал через sed,не получилось. подскажите,пожалуйста,как это сделать.

Такие вещи лучше делать на Цэ

1. Заполняем входной буфер ­— четыре байта.
2. Если применима длинная конверсия, то делаем её и снова заполняем входной буфер.
3. Если применима короткая конверсия, то делаем её и дочитываем входной буфер до 4х байт.
4. Если обе конверсии неприменимы, то пишем очередной байт в выходной файл, читаем очередной байт во входной буфер.
Как-то так.

Northsoft ★★
()
cat file | perl -pe "s/\r\n/;/g;chomp" | perl -pe "s/;;/\n/g"
ananas ★★★★★
()
$ echo -en '1\r\n2\r\n3\r\n\r\n' > /tmp/1.txt
$ cat /tmp/1.txt | hexdump -C
00000000  31 0d 0a 32 0d 0a 33 0d  0a 0d 0a                 |1..2..3....|
0000000b
$ cat /tmp/1.txt | xxd -ps | sed 's|0d0a0d0a|{LF}|g;s|0d0a|3b|g;s|{LF}|0a|g' | xxd -r -p | hexdump -C
00000000  31 3b 32 3b 33 0a                                 |1;2;3.|
00000006
Punk
()

Зачем sed, если уже есть BASH?

v='AAAA'$'\x0D\x0A''BBBBB'$'\x0D\x0A\x0D\x0A''CCCCC'$'\x0D\x0A''DDDDDDD'
v=${v//$'\x0D\x0A\x0D\x0A'/$'\n'}
v=${v//$'\x0D\x0A'/\;}
echo "$v"

DRVTiny ★★★★★
()

Но если очень хочется на sed, то:

sed -r -z 's/\x0d\x0a\x0d\x0a/\n/g; s/\x0d\x0a/\;/g'

x-signal ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.