написание сценария, который находит неправильные файлы и исправляет их с помощью stdout

Если ваша программа разрезает строки, вам нужно соединить их перед запуском вашего 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" {} +

Все вышеперечисленные подходы выполняют поиск в подкаталогах.

1
22.04.2019, 22:29
1 ответ

Если вам не нужны никакие хитрости в отношении структуры даты, т. е. она всегда будет иметь форму ГГГГ/ММ/ДД или ГГГГ -ММ -ДД, вы можете обойтись довольно простой командой, которая просто исправит первую строку каждого файла во всем дереве каталогов.

find. -type f -exec sed -i '1 s:-:/:g' {} \;
  • sed -iредактирует файл в месте -, нет необходимости объединять и перемещать файлы.
  • '1...редактирует только первую строку каждого файла.
  • 's:-:/:g'заменяет каждый экземпляр " -" в строке на "/"

После этого вы сможете повторно -запустить исходный скрипт и рассортировать эти файлы по каталогам с правильными датами.

1
27.01.2020, 23:41

Теги

Похожие вопросы