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

Исходное сообщение
"поиск и замена в файлах при помощи sed"

Отправлено che4 , 12-Ноя-10 20:49 
Здравствуйте.
Нужно выполнить замену строки RewriteCond %{HTTP_USER_AGENT} DigExt [OR]

Делаю так:

for i in `find . -name "testfile" -exec grep -H 'RewriteCond %{HTTP_USER_AGENT} DigExt [OR]' {} \; | awk -F":" '{print $1}' | xargs`; do sed -i  's/RewriteCond %\{HTTP_USER_AGENT\} DigExt \[OR\]/TEST/g' $i; done

Проблема с экранирование насколько я понял.

Ткните, пожалуйста, где косяк


Содержание

Сообщения в этом обсуждении
"поиск и замена в файлах при помощи sed"
Отправлено phpcoder , 12-Ноя-10 20:52 
> Здравствуйте.
> Нужно выполнить замену строки RewriteCond %{HTTP_USER_AGENT} DigExt [OR]
> Делаю так:
> for i in `find . -name "testfile" -exec grep -H 'RewriteCond %{HTTP_USER_AGENT}
> DigExt [OR]' {} \; | awk -F":" '{print $1}' | xargs`;
> do sed -i  's/RewriteCond %\{HTTP_USER_AGENT\} DigExt \[OR\]/TEST/g' $i; done

sed -i  's/RewriteCond %{HTTP_USER_AGENT} DigExt \[OR\]/TEST/g' $i

Что-то вы лишнего наэкранировали.



"поиск и замена в файлах при помощи sed"
Отправлено che4 , 12-Ноя-10 20:56 
>> Здравствуйте.
>> Нужно выполнить замену строки RewriteCond %{HTTP_USER_AGENT} DigExt [OR]
>> Делаю так:
>> for i in `find . -name "testfile" -exec grep -H 'RewriteCond %{HTTP_USER_AGENT}
>> DigExt [OR]' {} \; | awk -F":" '{print $1}' | xargs`;
>> do sed -i  's/RewriteCond %\{HTTP_USER_AGENT\} DigExt \[OR\]/TEST/g' $i; done
> sed -i  's/RewriteCond %{HTTP_USER_AGENT} DigExt \[OR\]/TEST/g' $i
> Что-то вы лишнего наэкранировали.

Пробовал и так уже - не работает замена(


"поиск и замена в файлах при помощи sed"
Отправлено phpcoder , 12-Ноя-10 20:58 
> Пробовал и так уже - не работает замена(

УМВР:

[c0der@rock ~]$ cat test.txt
RewriteCond %{HTTP_USER_AGENT} DigExt [OR]
[c0der@rock ~]$ sed 's/RewriteCond %{HTTP_USER_AGENT} DigExt \[OR\]/TEST/g' test.txt
TEST

Так что либо вы не указали что у вас какая-нибудь FreeBSD, либо старая версия GNU sed, либо ошибка где-нибудь в другом месте.



"поиск и замена в файлах при помощи sed"
Отправлено che4 , 12-Ноя-10 21:05 
>>> Здравствуйте.
>>> Нужно выполнить замену строки RewriteCond %{HTTP_USER_AGENT} DigExt [OR]
>>> Делаю так:
>>> for i in `find . -name "testfile" -exec grep -H 'RewriteCond %{HTTP_USER_AGENT}
>>> DigExt [OR]' {} \; | awk -F":" '{print $1}' | xargs`;
>>> do sed -i  's/RewriteCond %\{HTTP_USER_AGENT\} DigExt \[OR\]/TEST/g' $i; done
>> sed -i  's/RewriteCond %{HTTP_USER_AGENT} DigExt \[OR\]/TEST/g' $i
>> Что-то вы лишнего наэкранировали.
> Пробовал и так уже - не работает замена(

Что за непойму

[root@ryb]# cat test
RewriteCond %{HTTP_USER_AGENT} DigExt [OR]

[root@ryb]# sed 's/RewriteCond %{HTTP_USER_AGENT} DigExt \[OR\]/TEST/g' test
TEST

а вот так уже в файл не пишет

for i in `find . -name "test" -exec grep -H 'RewriteCond %{HTTP_USER_AGENT} DigExt [OR]' {} \; | awk -F":" '{print $1}' | xargs`; do sed -i  's/RewriteCond %{HTTP_USER_AGENT} DigExt \[OR\]/TEST/' $i; done

OS CentOS release 5.4 (Final)
GNU sed version 4.1.5


"поиск и замена в файлах при помощи sed"
Отправлено phpcoder , 12-Ноя-10 21:09 
>[оверквотинг удален]
> [root@ryb]# cat test
> RewriteCond %{HTTP_USER_AGENT} DigExt [OR]
> [root@ryb]# sed 's/RewriteCond %{HTTP_USER_AGENT} DigExt \[OR\]/TEST/g' test
> TEST
> а вот так уже в файл не пишет
> for i in `find . -name "test" -exec grep -H 'RewriteCond %{HTTP_USER_AGENT}
> DigExt [OR]' {} \; | awk -F":" '{print $1}' | xargs`;
> do sed -i  's/RewriteCond %{HTTP_USER_AGENT} DigExt \[OR\]/TEST/' $i; done
> OS CentOS release 5.4 (Final)
> GNU sed version 4.1.5

А так?

find . -name "test" |
xargs grep -l 'RewriteCond %{HTTP_USER_AGENT} DigExt [OR]' |
xargs sed -i  's/RewriteCond %{HTTP_USER_AGENT} DigExt \[OR\]/TEST/'

?


"поиск и замена в файлах при помощи sed"
Отправлено che4 , 12-Ноя-10 21:15 
>[оверквотинг удален]
>> for i in `find . -name "test" -exec grep -H 'RewriteCond %{HTTP_USER_AGENT}
>> DigExt [OR]' {} \; | awk -F":" '{print $1}' | xargs`;
>> do sed -i  's/RewriteCond %{HTTP_USER_AGENT} DigExt \[OR\]/TEST/' $i; done
>> OS CentOS release 5.4 (Final)
>> GNU sed version 4.1.5
> А так?
> find . -name "test" |
> xargs grep -l 'RewriteCond %{HTTP_USER_AGENT} DigExt [OR]' |
> xargs sed -i  's/RewriteCond %{HTTP_USER_AGENT} DigExt \[OR\]/TEST/'
> ?

[root@ryb]# find . -name "test" | xargs grep -l 'RewriteCond %{HTTP_USER_AGENT} DigExt [OR]' | xargs sed -i  's/RewriteCond %{HTTP_USER_AGENT} DigExt \[OR\]/TEST/'  
sed: no input files


"поиск и замена в файлах при помощи sed"
Отправлено phpcoder , 12-Ноя-10 21:18 
> [root@ryb]# find . -name "test" | xargs grep -l 'RewriteCond %{HTTP_USER_AGENT} DigExt
> [OR]' | xargs sed -i  's/RewriteCond %{HTTP_USER_AGENT} DigExt \[OR\]/TEST/'
> sed: no input files

Похоже, что find . -name "test" | xargs grep -l 'RewriteCond %{HTTP_USER_AGENT} DigExt [OR]' ничего не вернуло. Добейтесь чтобы возвращало.