LINUX.ORG.RU

Некорректная работа sed

 


0

1

Необходимо дописать в каждую строку файла (точнее вывода в файл) определенное значение.

cat ent.txt | sed "s/$/QQQ/"
получаю очень интересный вывод:
...
QQQ07-18 12:26:00,651 109.*.*.*
QQQ07-18 12:33:18,774 109.*.*.*
QQQ07-18 12:40:48,133 109.*.*.*
QQQ07-21 09:25:08,172 109.*.*.*
QQQ07-21 09:32:07,355 109.*.*.*
=============================================QQQ
 QQQ
QQQ03-20 16:12:53,593 109.*.*.*
QQQ03-20 16:46:39,306 109.*.*.*
QQQ03-20 16:47:01,557 109.*.*.*
QQQ03-20 16:48:00,287 109.*.*.*
=============================================QQQ
 QQQ

Тоесть затираются первые 3 символа, но не во всех строках. Как объяснить сей парадокс? Может я что не так делаю?

GNU sed версия 4.2.1

★★
Ответ на: комментарий от dexpl

Спасибо. Тяну лог с удаленки, не подумал что там другой EOL.

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

это не подошло так как дописать надо данные из bash-переменной, на русском языке, а awk на них как-то странно реагирует.

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

из bash-переменной, на русском языке

ЭТАПЯТЬ!

das_tier ★★★★★
()

Может я что не так делаю?

1. Доллар в двойных кавычках может быть съеден шеллом. В данном случае лучше пользовать апострофы или дополнительно заэкранировать доллар.

2. Первые три символа не затираются. Отправь вывод в файл и внимательно посмотри. Можно в нех-режиме.

3. dos2unix на исходный файл поможет.

debugger ★★★★★
()

's/\r//;s/$/QQQ/'

anonymous
()

Тоесть затираются первые 3 символа

sed всё делает правильно, \r это «возврат каретки». Т.е. позиция печати перемещается влево. Можно так сделать:

sed -r 's/\s*$/QQQ&/

cat ent.txt | sed

это мода такая, писать говнокод? Или ты меня троллишь?

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