URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6632
[ Назад ]

Исходное сообщение
"Редактирование текста в файле"

Отправлено Roma , 27-Июл-07 08:25 
Hi!
Есть два файда, первый 1.txt разделенный символом табуляции
text1   aa1122
text2   00bb22
text3   00eebb
text4   678789
text5   098765
text6   1234cc
text7   aabbcc

и второй файл 2.txt
text1
text3
text6

Надо сравнить эти файлы и в файле 1.txt в совподающих строках с файлом 2.txt заменить
символы а в с на 1 2 3
то есть должно получиться следующее
text1   111122
text2   00bb22
text3   00ee22
text4   678789
text5   098765
text6   123433
text7   aabbcc

Делаю так
sed -e 's/^/^/' -e 's/$/ /' < /tmp/22.txt | sed 'y/abc/123/' /tmp/11.txt

Получается
text1   111122
text2   002222
text3   00ee22
text4   678789
text5   098765
text6   123433
text7   112233

То есть замена происходит во всех строках!
Как добиться правильного вывода?



Содержание

Сообщения в этом обсуждении
"Редактирование текста в файле"
Отправлено phpcoder , 27-Июл-07 11:39 
[c0der@rock ~/openet]$ while read PATTERN; do sed -i "/^$PATTERN/y/abc/123/" 1.txt; done <2.txt            
[c0der@rock ~/openet]$ cat 1.txt
text1   111122
text2   00bb22
text3   00ee22
text4   678789
text5   098765
text6   123433
text7   aabbcc

"Редактирование текста в файле"
Отправлено Roma , 27-Июл-07 12:38 
Сенкс за помощь, конечно, в любом случае, а без цикла никак необойтись?

Пробовал так
sed -e 's/^/^/' -e 's/$/ /' < /tmp/2.txt | sed 'y/abc/123/' /tmp/1.txt | grep -f - /tmp/1
.txt

Получается
text4   678789
text5   098765

Думаю как бы тут с grep извратиться.


"Редактирование текста в файле"
Отправлено phpcoder , 27-Июл-07 12:49 
>Сенкс за помощь, конечно, в любом случае, а без цикла никак необойтись?

sed -i "/^\(`paste 2.txt -d'+' -s | sed 's,+,\\\|,g'`\)/y/abc/123/" 1.txt

Можно ещё вот так. Так даже вроде бы лучше: файл правим один раз, а не вызываем sed для каждой строки + избавились от цикла.


"Редактирование текста в файле"
Отправлено Roma , 27-Июл-07 13:12 
>sed -i "/^\(`paste 2.txt -d'+' -s | sed 's,+,\\\|,g'`\)/y/abc/123/" 1.txt

Хм.. туплю. У меня не хочет
Вываливает
paste: -d+: No such file or directory
sed: 1: "1.txt": invalid command code .


"Редактирование текста в файле"
Отправлено phpcoder , 27-Июл-07 13:13 
>>sed -i "/^\(`paste 2.txt -d'+' -s | sed 's,+,\\\|,g'`\)/y/abc/123/" 1.txt
>
>Хм.. туплю. У меня не хочет
>Вываливает
>paste: -d+: No such file or directory
>sed: 1: "1.txt": invalid command code .

У меня в zsh работало. Возможно, проблемы в шелле или ещё-чем-нибудь. (помогает подставить echo перед командой и посмотреть, какая команда получится в результате и будет выполнена)


"Редактирование текста в файле"
Отправлено madskull , 27-Июл-07 13:06 
>[оверквотинг удален]
>Пробовал так
>sed -e 's/^/^/' -e 's/$/ /' < /tmp/2.txt | sed 'y/abc/123/' /tmp/1.txt
>| grep -f - /tmp/1
>.txt
>
>Получается
>text4   678789
>text5   098765
>
>Думаю как бы тут с grep извратиться.

Вот так тоже можно извратиться:

cat 1.txt | sed "/`cat 2.txt | tr '\n' '|' | sed 's/|$//;s/|/\\\\|/g'`/y/abc/123/"


"Редактирование текста в файле"
Отправлено phpcoder , 27-Июл-07 13:07 
>>[оверквотинг удален]
>cat 1.txt | sed "/`cat 2.txt | tr '\n' '|' | sed 's/|$//;s/|/\\\\|/g'`/y/abc/123/"

cat здесь лишний:

sed "/`cat 2.txt | tr '\n' '|' | sed 's/|$//;s/|/\\\\|/g'`/y/abc/123/"  1.txt



"Редактирование текста в файле"
Отправлено Roma , 27-Июл-07 13:36 
>sed "/`cat 2.txt | tr '\n' '|' | sed 's/|$//;s/|/\\\\|/g'`/y/abc/123/"  1.txt

Точно! Это то что нужно!
Всем большое-большое спасибо!!!


"Редактирование текста в файле"
Отправлено Roma , 27-Июл-07 15:43 
М-дя... рано радовался..

глянул не проверяя, думал все ОК
sed "/`cat 2.txt | tr '\n' '|' | sed 's/|$//;s/|/\\\\|/g'`/y/abc/123/"  1.txt

а оно оказывается не проходит, выводит файл 1.txt без замены символов, в первозданном, так сказать, варианте..
Есть еще какие нибудь варианты?


"Редактирование текста в файле"
Отправлено phpcoder , 27-Июл-07 15:47 
[...]
>Есть еще какие нибудь варианты?

Мой вариант, попробуй подправить :)



"Редактирование текста в файле"
Отправлено Soldatik , 29-Июл-07 14:02 
>[...]
>>Есть еще какие нибудь варианты?
>
>Мой вариант, попробуй подправить :)

Учился в школе, инсте, потом армия, потом жизнь стала казаться сказкой. Живу как в раю после дембеля. Лучше бы косил :)

http://prostieokna.ru/a/