2014-11-07 4 views
0

Мне не удалось найти то, что я ищу, поэтому я решил, что спрошу. Я ищу способ сделать следующее:Bash script Изменить все

  1. Сканирование директории, содержащей пронумерованные каталоги (25-109)
  2. Сканирование каталогов внутри этих пронумерованных каталогов
  3. Найдите строку во всех файлов с именем "map.inp", содержащий текст: "MAP_93 = A 93 A"
  4. Изменить все вхождения в "MAP_93 = A 93 V"

Обычно я хотел бы сделать это вручную, но есть примерно одна тысяча файлов редактировать каждый в своих собственных каталог. Я нашел схему linux для достижения этой цели, но я не уверен, как использовать скрипт Bash, который имеет ту же функциональность. Все файлы, подлежащие изменению, имеют одно и то же имя, map.inp.

Пути находятся в каталоге jan10, но и в подкаталогах, как это:

/user/jan10/100/100A/map.inp 
/user/jan10/99/99A/map.inp 

т.д.

Схема линукс я нашел бы работать так:

find /user/jan10/ \ 
name map.inp \ 
exec sed -i~ 's/MAP_93= A 93 A\+/MAP_93= A 93 V/' {} \; 

желательным вводом будет:

MAP_89= A 93 A 

И выход:

MAP_93= A 93 V 

Кто-нибудь есть идеи о том, как это сделать? Приносим извинения, если это неясно,

ответ

1

Вы забываете добавить - до name и exec параметров в вышеупомянутой команде find.

find /user/jan10/ -name "map.inp" -exec sed -i 's/MAP_89= A 93 A\+/MAP_93= A 93 V/' {} \; 
+0

и осторожно с пространством при использовании его в части регулярного выражения. –

+0

Ты точно прав, спасибо за это! – George