2015-01-26 2 views
1

Я пытаюсь найти все файлы определенной папки и который содержит текст «TO_BE_REPLACED», и я хотел бы заменить эту строку на имя файла без символов Impl. Я имею в виду, имея файл под названием MyServiceImpl с текстом «TO_BE_REPLACED», я хотел бы заменить его текстом «MyService». Как я могу это достичь? Я попробовал этот путь без результатов:Bash script find pattern и replace by filename

find src/main/java/com/shn/*/server/service/impl/ -type f -print0 | xargs -0 sed -i "" "s/TO_BE_REPLACED/<filename>/g" 

ответ

0

Вы можете сделать это следующим образом:

while read -r filename 
do 
    sed -i "s/TO_BE_REPLACED/MyService/g" $filename 
done < <(find "src/main/java/com/shn/*/server/service/impl/" -type f) 
0

Если у вас есть GNU Parallel> = 20140822:

find . -type f | parallel -q sed -i "" -e 's/TO_BE_REPLACED/{=s:.*/::;s/Impl$//=}/g' {} 

Хитрость здесь заключается в использовании выражение perl для перехода от .../MyServiceImpl к MyService и использовать его в sed.