Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > *NIX системы: Общие вопросы > Заменить текст 'qwe' на 'ZxCv', возможно tr.


Автор: CrazyDiamond 4.11.2006, 14:01
Bash.
Элементарная цель - заменить по тексту 'qwe' на 'asdfg'. Я думал, что команда tr должна с этим справляться, но у меня она не справляется). 
Все ключи перепробовал, заменяет 'qwe' на 'asd', а 'fg' проглатывает. Как сделать, что бы строка1 заменялась на целиковую строку2?
Сейчас пытаюсь на перл тоже самое:
Код

cat ~grigoryr/sql3res.csv | while read CSV
do
perl -e "s/RASADV/Rashod_v_Advantics/; print"
done


Т.к. это простейшая замена слова1 на слово2, никаких ключей после s/str1/str2/ не надо ставить, правильно?
Считывание файла происходит построчно, соответствтенно, perl -e обрабатывает текущую переменную, в которой находится текущая строка. Вроде всё правильно, но ничего не выводится)

Ещё  попробовал perl -e "$CSV=~s/RASADV/blabla/; print", что бы явно определить, какую переменную парсить и выводить, при этом идёт ругань на синтаксис.

UPD: Сделал sed'ом, но мы не ищем лёгких путейsmile
cat ~grigoryr/sql3res.csv | while read CSV; do echo $CSV | sed s/RASADV/blabla/; done

Автор: spin2 4.11.2006, 16:13
Недавно сталкивалась с аналогичной ситуацией, делала так:
Код

cat some.file | sed -e s/first/second/g > some.file.old
mv some.file.old some.file

Автор: MAKCim 4.11.2006, 16:25
Цитата

Я думал, что команда tr должна с этим справляться

tr несколько для другого
делай через sed (впрочем, ты и так уже сделал)

Автор: powerfox 4.11.2006, 18:28

M
powerfox
CrazyDiamond[/B], прошу вас не создавать одинаковые темы в разных разделах форума!

Автор: CrazyDiamond 4.11.2006, 18:40
Запостив её в другом разделе я ошибся, извинился за это и пометил тему как решённую. Я бы её удалил, если бы была такая функция)

Автор: ZeeLax 4.11.2006, 19:08
Цитата(CrazyDiamond @  4.11.2006,  17:01 Найти цитируемый пост)
Считывание файла происходит построчно, соответствтенно, perl -e обрабатывает текущую переменную, в которой находится текущая строка. Вроде всё правильно, но ничего не выводится)

Ключ -e указывает perl интерпретировать его (ключа) значение, как код perl.
Цитата(CrazyDiamond @  4.11.2006,  17:01 Найти цитируемый пост)
perl -e "s/RASADV/Rashod_v_Advantics/; print"

эта команда заставит perl произвести операцию замены в переменной по умолчаню ($_) и, вывести её. Но, т.к. не происходит присвоения ей входных данных, данная операция возвращает пустую строку.
Как вариант:
Код

cat ~grigoryr/sql3res.csv | perl -e "while (<>) {s/RASADV/Rashod_v_Advantics/; print}"
 но, это уже другой раздел smile Пользуйся sed.

Автор: powerfox 4.11.2006, 21:24
CrazyDiamond, тогда извиняюсь.

Автор: Бонифаций 5.11.2006, 14:57
Цитата(spin2 @ 4.11.2006,  16:13)
Недавно сталкивалась с аналогичной ситуацией, делала так:
Код

cat some.file | sed -e s/first/second/g > some.file.old
mv some.file.old some.file

это можно было бы одной командой сделать, если использовать ed  а не sed

Автор: spin2 7.11.2006, 17:06
Бонифаций, спасибо! Учту. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)