Учитывая ваш комментарий о том, что вы хотите обновить файлы in this directory and other directories next to it.
, давайте предположим, что у вас есть каталог, в котором есть другие каталоги, в которых находятся файлы, которые вы хотите изменить. Вот как вы это сделаете после того, как cd -перейдет в этот каталог верхнего уровня:
find. -maxdepth 2 -mindepth 2 -exec awk -i inplace '{print} $1==8852{$1=9997; print}' {} +
В приведенном выше примере используется GNU awk для редактирования «на месте» и GNU find для +
. Если у вас нет инструментов GNU, при условии, что ваши имена файлов не содержат символы новой строки:
tmp=$(mktemp)
while IFS= read -r file; do
awk '{print} $1==8852{$1=9997; print}' "$file" > "$tmp" &&
mv "$tmp" "$file"
done < <(find. -maxdepth 2 -mindepth 2) )
rm -f "$tmp"
Если вы не хотите изменять метку времени для файлов, не содержащих 8852
, тогда:
tmp=$(mktemp)
while IFS= read -r file; do
awk '$1==8852{f=1; exit} END{exit !f}' "$file" &&
awk '{print} $1==8852{$1=9997; print}' "$file" > "$tmp" &&
mv "$tmp" "$file"
done < <(find. -maxdepth 2 -mindepth 2) )
rm -f "$tmp"