Если ваша программа разрезает строки, вам нужно соединить их перед запуском вашего sed
. Например:
grep -rl "${SEARCH}" --include \*.pc ./ |
xargs sed -i "s/-$//; s/-\n//; s#${SEARCH}#${REPLACE}#g"
Или
grep -rl "${SEARCH}" --include \*.pc ./ |
xargs perl -i -pe "s/-\n//; s#$SEARCH#$REPLACE#g"
В качестве альтернативы можно использовать find
вместо grep
:
find -type f -name '*.pc' -exec perl -i -pe "s/-\n//; s#$SEARCH#$REPLACE#g" {} +
Все вышеперечисленные подходы выполняют поиск в подкаталогах.
Если вам не нужны никакие хитрости в отношении структуры даты, т. е. она всегда будет иметь форму ГГГГ/ММ/ДД или ГГГГ -ММ -ДД, вы можете обойтись довольно простой командой, которая просто исправит первую строку каждого файла во всем дереве каталогов.
find. -type f -exec sed -i '1 s:-:/:g' {} \;
sed -i
редактирует файл в месте -, нет необходимости объединять и перемещать файлы. '1...
редактирует только первую строку каждого файла. 's:-:/:g'
заменяет каждый экземпляр " -" в строке на "/" После этого вы сможете повторно -запустить исходный скрипт и рассортировать эти файлы по каталогам с правильными датами.