LINUX.ORG.RU
ФорумAdmin

sed замена символа

 ,


0

2

Коллеги, смотрю строку через hexdump -C:

000005b0  52 49 20 41 4e 41 59 55  52 54 20 32 0a 2c 4b 41  |RI ANAYURT 2.,KA|
надо убрать символ newline (0a)
вот так выглядит команда, которая заменит newline и ',' на WW:
sed -e 's/\x0a\x2c/WW/' testfile
Не работает.
Подставлю другие символы - сработает:
sed -e 's/\x52\x54/WW/' testfile
Что я делаю не так ?

★★★★★

Последнее исправление: dada (всего исправлений: 1)

sed же построчно обрабатывает вывод, поэтому \n, являясь разделителем строк, не может быть обработан, так как не участвует в сопоставлении. Можно найти варианты обработки перевода строки на sed, но они не самые простые и может быть проще делать замену как-то иначе.

xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 2)
Ответ на: комментарий от xaizek

у меня многомного файлов.
знаю tr, но он работает с оутпутом.
посоветуй плс инструмент, как бы замену sed.

dada ★★★★★
() автор топика
Ответ на: комментарий от dada

у меня многомного файлов.

Кажется, догадываюсь... Вы думаете, что sed(1) умеет редактировать файлы.

Это неверно. Имя его — stream editor — не врет, он редактирует только потоки. Файловый же редактор называется ed(1).

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от dada

у меня многомного файлов.

инструмент, как бы замену sed

Если файлы <2Гб и побайтово можно записать исходные и заменяющие фрагменты, то я бы использовал редактор - он умеет простое редактирование, без регулярок, по маске, хоть сразу в дереве каталогов. Все редактируемые файлы грузятся в память одним куском, потому много оперативки приветствуется.

Napilnik ★★★★★
()

Гугля вроде дает примеры, даже со ссылкой на на lor. Лениво погуглить и проверить? Но использование буфера таки кушает память. Если файлы большие может быть и плохой вариант.

anc ★★★★★
()
Ответ на: комментарий от dada

знаю tr, но он работает с оутпутом.

Чем tr не устраивает?

Можно sed-ом. Обычно он загружает файлы построчно, поэтому концы строк не видит. Но можно, например, загрузить весь файл целиком (что сильно замедлит работу). На официальном сайте куча примеров, у каждого свои недостатки. http://sed.sf.net/ , http://sed.sourceforge.net/sed1line.txt

Можно воспользоваться перлом, го или другими языками с поддержкой регулярных выражений. Лично мне всегда хватало tr или скриптов наподобие

sed '$!N;s/\n/ /'
(пропускает 0A в самом конце, если правильно помню)

question4 ★★★★★
()
Ответ на: комментарий от question4

Чем tr не устраивает?

КЯП ТС хочет заменить один символ на много символов. Вот тут tr и не утраивает.

anc ★★★★★
()

классический бинарный хэк

echo -ne «\x2c» | dd of=your-file.bin bs=1 conv=notrunc seek=$((16#05b0 + 12))

anonymous
()
Ответ на: комментарий от anonymous

лор кавычки похерил... вот так чётче будет

echo -ne "\x2c" | dd of=your-file.bin bs=1 conv=notrunc seek=$((16#05b0 + 4))

anonymous
()
Ответ на: комментарий от anc

нет, мне просто нужно заменить 32 0a 2c на 32 0a 2c
т.е. убрать 0a только в этом месте.

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