Знайдіть і замініть grep і perl


4

Я хотів би прогорнути та замінити певний текст у текстових файлах у каталозі та у всіх підкаталогах. Я намагаюся наступне:

ls -R | egrep '.*\.txt' | perl -i -p -e 's/one.a/two.a/g'

Хоча grep випльовує список, і це виконується, я не можу, мабуть, змусити насправді записувати у файли. Якщо можливо, мені цікаво навчитися робити це без використання find.

Хтось може помітити, де я помиляюся?

Дякую, jml

Відповіді:


2

Є дві незначні проблеми: По-перше, щоб передати імена файлів до однолінейного Perl таким чином, вам потрібно використовувати команду xargs .

По-друге, вам потрібно буде пройти повний шлях до однолінійного Perl, тому що він може бути у підкаталозі, тому було б краще використовувати find.

Ось робоча команда:

find . -name "*.txt" | xargs perl -i -p -e 's/one.a/two.a/g'

я не можу цього зробити з ls / grep?
jml

1
Неможливо отримати повний шлях, включаючи рекурсивні підкаталоги ls, але findнабагато простіше. Див stackoverflow.com/questions/1767384 / ...
BringMyCakeBack
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.