Сложная (?) Команда замены текста Unix - PullRequest
1 голос
/ 14 февраля 2011

Что эквивалентно командной строке: Для каждого файла, содержащего «AAA» в его содержимом, найдите «BBB» и замените его на «CCC»

Таким образом, команда будет соответствовать и заменять BBB в файле:

<html>
<head></head>
<body>
AAA
Hello world!
BBB    
</body>
</html>

Но не в файле:

<html>
<head></head>
<body>
Don't match me!
BBB    
</body>
</html>

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 14 февраля 2011

Что-то вроде grep -l AAA file-names | xargs sed -i .bak 's/BBB/CCC/g' должно работать. В будущем вы, возможно, захотите задать такие вопросы на https://serverfault.com/.

0 голосов
/ 14 февраля 2011

Использование положительного взгляда сзади также может сделать трюк s/(?<=AAA).*?(BBB)/CCC/g.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...