Мне нужно удалить много переводов строки (Hex \ x0a) в файле журнала.
Я просто решил решить проблему. Я знаю, это немного сложно ...
Вы знаете, как решить проблему?
Вот пример текстового файла: http://s000.tinyupload.com/index.php?file_id=05715208147126674999
hexdump -C hexprob.txt
00000000 45 0a 69 0a 6e 0a 66 0a 61 0a | E.i.n.f.a. |
Я использую следующий код, чтобы удалить букву «E»:
sed -r 's / \ x45 // g' hexprob.txt | hexdump -C
00000000 0a 69 0a 6e 0a 66 0a 61 0a | .i.n.f.a. |
Но если я хочу удалить '\ x0a', это не сработает:
sed -r 's / \ x0a // g' hexprob.txt | hexdump -C
00000000 45 0a 69 0a 6e 0a 66 0a 61 0a | E.i.n.f.a. |
Ты знаешь что делать? Я просто не знаю, почему я не могу заменить или удалить его так же, как любое другое шестнадцатеричное значение?
Спасибо вам большое! Fake4d
Утилита sed ориентирована на строки. Строка считывается и помещается в пространство шаблонов (пространство шаблонов не содержит \ n). Действия sed применяются к пространству шаблонов, и затем строка записывается с добавлением \ n. Вот почему он не делает того, чего вы ожидаете.
Если вы хотите удалить все новые строки в файле, вы можете сделать это
sed ':a;N;$!ba;s/\n//g' file
Это эффективно перебирает строки чтения файла и добавляет их в пространство шаблонов до тех пор, пока не будет достигнута последняя строка, когда все пространство шаблонов будет удалено для удаления \ n.
В зависимости от размера вашего файла это может не сработать, поскольку могут быть ограничения на размер пространства шаблонов. Как правило, более портативный в использовании tr сделать это
tr -d '\n' <file