LINUX.ORG.RU

замена текста (НЕ регэкспы)


0

0

Есть произвольный текст. Возможно многострочный, возможно бинарный. Почти наверняка с символами []${}/\.,:'«`. Надо его заменить на другой текст, тоже любой. Как это правильно делать?

Любителям отвечать на подобные вопросы „man awk“: во-первых, не man, а info, ламеры, а во-вторых я и то и то читал, ответа там нет.

★★★★★

произвольный текст. Возможно многострочный, возможно бинарный

man xxd

переведи все текстовый 16-ый вид и используй стандартные утилиты, тот же sed для замены

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

переведи все в текстовый

исправлено.

sdio ★★★★★
()

Чувак назвал всех ламерами, стоит ли ему отвечать?

 

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

>переведи все текстовый 16-ый вид и используй стандартные утилиты, тот же sed для замены

Это даже не удаление гланд через жопу, это взрыв пациента, соскребание ошмётков со стен (кроме гланд) и сшивание обратно.

legolegs ★★★★★
() автор топика

Так. Удивительное дело, простая и бесхитростная утилита replace существует. Она делает почти как я хочу, за исключением символов \0 и \n. Кто бы мог подумать, что она входит в пакет mysql-server?

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

Не угадал. Просто периодически у разных людей возникает такой вопрос и все их пинают этим man awk. А теперь мне самому это понадобилось и оказалось, что авк бесполезен здесь и стандартного способа заменить простой текст не существует, обязательно какие-то вы**оны. Это печалит.

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

что именно нужно-то (примеры данных, правильные и неправильные решения)? а то за толщиной стартового топика не разобрать. и да, на 98% уверен, что перл решит твои проблемы. чуть не забыл: для перла основная инфа идёт по man'у и perldoc'у, да, info нервно курит в специально отведённых для этого местах ;)

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

legolegs> за исключением символов \0 и \n

Ололо, т.е. требовние «Возможно многострочный, возможно бинарный.» отпадают. Остается обычный line-by-line текст с которым справится обычный sed

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

что именно нужно-то?

Например, есть программа, в ней много регэкспов и все неправильные, надо заменить на правильные.

WRONG="\w+@\w+.\w{2,4}"
RIGHT="[-_.a-z0-9]+@[-.a-z0-9]+"
sed -i s/$WRONG/$RIGHT/g file # ага, щас.
awk '{ gsub("'$WRONG'","'$RIGHT'"); print }' # уже побежал

и да, на 98% уверен, что перл решит твои проблемы

Для такой примитивной задачи юзать перл? Может на моно тогда уж, чего мелочиться?

для перла основная инфа идёт по man'у и perldoc'у, да, info нервно курит в специально отведённых для этого местах ;)

Я рад за перл, а вот у гнутых утилит в манах только огрызки от инфо. Посылать в маны - по сути дезинфорамция.

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

> Для такой примитивной задачи юзать перл? Может на моно тогда уж, чего мелочиться?

гы, походу я таки угадал относительно тролля/девственника :)

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

Молодец, разделил тред на троллей и девственников. По теме сказать нечего? Тут не толксы вообще-то, принято на вопросы отвечать.

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

Не для говнюков, а для всех остальных, кому может пригодиться

$ echo -n '\w+@\w+.\w{2,4}' > wrong.txt
$ echo -n '[-_.a-z0-9]+@[-.a-z0-9]+' > right.txt
$ cat input.txt 
Тест строка 1 s/\w+@\w+.\w{2,4}/ конец строки 1
Тест строка 2 s/\W+@\W+.\W{3,5}/ конец строки 2
Тест строка 3   \w+@\w+.\w{2,4}  конец строки 3

$ cat input.txt | xxd -ps | tr -d '\n' | sed s/$(cat wrong.txt | xxd -ps | tr -d '\n')/$(cat right.txt | xxd -ps | tr -d '\n')/g | xxd -r -ps
Тест строка 1 s/[-_.a-z0-9]+@[-.a-z0-9]+/ конец строки 1
Тест строка 2 s/\W+@\W+.\W{3,5}/ конец строки 2
Тест строка 3   [-_.a-z0-9]+@[-.a-z0-9]+  конец строки 3
sdio ★★★★★
()
Ответ на: комментарий от sdio

Комментарий:

содержимое файлов wrong.txt right.txt input.txt — произвольное (многострочный текст, бинарные данные, ...)

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

> По теме сказать нечего?

есть чего, но нет кому.

> Тут не толксы вообще-то, принято на вопросы отвечать.

> принято на вопросы отвечать.

я кончил и закурил.

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

Если б я знал решение на отлично, я бы эту тему не создавал.

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