Как мне перебрать файлы в каталоге с определенным префиксом и заменить определенное слово в этих файлах? - PullRequest
0 голосов
/ 14 мая 2019

У меня есть файлы в каталоге, и они начинаются с префикса "TESTFILE.".

Как мне перебрать эти файлы с этим префиксом и заменить определенное слово другим словом только в этих файлах?

Я попробовал приведенный ниже код, и он изменяет все файлы в каталоге, а не только файлы с этим префиксом.Мне нужно изменить файлы только с этим префиксом.

for i in *TESTFILE.*; do sed -i 's/oldword/newword/g' * ;done

Если у меня есть файлы в каталоге:

TESTFILE.file1
TESTFILE.file2
OTHER.file3

и их тело содержит: «Заменим это старое слово»

Внутри тела этих файлов,Я хочу, чтобы «oldword» менялось на «newword» только в файлах, которые начинаются с «TESTFILE».

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Проблема в том, что ваше тело цикла игнорирует переменную цикла (i) и просто запускает sed для всего (*).

Исправление:

for i in TESTFILE.*; do sed -i 's/oldword/newword/g' -- "$i"; done

Или даже просто

sed -i 's/oldword/newword/g' TESTFILE.*

, если у вас не слишком много файлов для размещения в одной командной строке.

0 голосов
/ 15 мая 2019

Вот надежная версия, которая поддерживает пустые символы в имени файла:

#!/bin/bash
while IFS= read -r -d '' file; do
    sed -i 's/oldword/newword/g' "$file"
done < <(find . -type f -name 'TESTFILE.*' -print0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...