LINUX.ORG.RU

Найдет рекурсивно все файлы, где есть строчка t('.cat') и произведет в них замену:

grep -rl "t('.cat')" . | xargs sed -i "s|t('.cat')|t('.animals.cat')|g"

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

Ну точку было бы неплохо экранировать.

anonymous
()
$ echo "t('.cat')" |sed 's/t(\x27\.cat\x27)/t(\x27.animals.cat\x27)/'
t('.animals.cat')
$ echo "t('.cat')" |sed "s/t('\.cat')/t('.animals.cat')/"
t('.animals.cat')
$ echo "t('.cat')" |sed 's/t('"'"'\.cat\x27)/t(\x27.animals.cat\x27)/'
t('.animals.cat')

я не знаю, какой вариант более «правильный».

drBatty ★★
()

Можно менять любые данные (старые) на любые данные (новые) в любом типе файлов.
Используется 2 файла с шаблонами (старый/новый).
Все файл переводятся в hex -> замена -> обратно из hex

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

$ 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 (21.03.2010 0:52:09)


[14] Ответ на: комментарий от sdio 21.03.2010 0:52:09

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

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

sdio (21.03.2010 0:54:54)

sdio ★★★★★
()

Вполне очевидно:

$ python3 -c "import re;print(re.escape(\"t('.cat') t('.animals.cat')\"))"
t\(\'\.cat\'\)\ t\(\'\.animals\.cat\'\)

anonymous
()

Игнорирует знак '

У тебя кавычка открылась и закрылась: awk '{gsub(«t('. Чтобы в шелле вставлять одинарные кавычки в одинарные кавычки, надо их закрывать, вставлять экранированную и снова открывать (если строка продолжается). Вся конструкция воспринимается как один аргумент:

$ echo 'text '\''quoted text'\'
text 'quoted text'
arturpub ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.