The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Редактирование текста в файле"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Редактирование текста в файле"  
Сообщение от Roma email(??) on 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

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


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Редактирование текста в файле"  
Сообщение от phpcoder email(??) on 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
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Редактирование текста в файле"  
Сообщение от Roma email(??) on 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 извратиться.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Редактирование текста в файле"  
Сообщение от Roma email(??) on 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 .

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Редактирование текста в файле"  
Сообщение от phpcoder email(??) on 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 перед командой и посмотреть, какая команда получится в результате и будет выполнена)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Редактирование текста в файле"  
Сообщение от madskull (??) on 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/"

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Редактирование текста в файле"  
Сообщение от phpcoder email(??) on 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


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Редактирование текста в файле"  
Сообщение от Roma email(??) on 27-Июл-07, 15:43 
М-дя... рано радовался..

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

http://prostieokna.ru/a/

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру