Как извлечь часть строки из имени файла и поместить ее в этот файл

Я хочу автоматизировать процесс, в котором часть имени файла используется для замены значения в самом файле.

Сейчас я использую ручной процесс, который выглядит следующим образом:

получаю orgname вручную

$ grep -o orgname......... *2017-04* |uniq
...
uname=123456&**orgname=ABC5678**&userType=PERSISTENT&userLoginName=someusername&eventType=FAILED_LOGIN_ATTEMPT&timeOfOccurrence=2017-03-12%2016%3A49%3A36

Затем заменяю orgname новым именем

$ sed -i 's/ABC1234/5678/g' `*`5678`*` ; sed -i 's/DEF2345/6789/g' `*`6789`*`; sed -i etc...

Конечный результат выглядит следующим образом:

uname=123456&orgname=**1234**&userType=PERSISTENT&userLoginName=someusername&eventType=FAILED_LOGIN_ATTEMPT&timeOfOccurrence=2017-03-12%2016%3A49%3A36

The files are named like this:

rsa.collect.rsa-IB_L**1234**-2017-03-12.log.web1.decrypt

Все, что находится после orgname=, должно измениться с ABC5678 на все, что идет после Lxxxx, только в файлах с тем же xxxx в имени файла.

Мне трудно понять, как извлечь это число из имени файла и использовать его в sed. Есть сотни файлов (каждый со своей датой) и 6 различных пар чисел, с которыми нужно работать. Я надеюсь написать сценарий bash, который сделает все это за один раз.

Я пытался использовать grep -P в сочетании с занесением в какую-то переменную и использованием sed, но, возможно, есть лучший/простой способ?

Дайте мне знать, если есть дополнительные вопросы.

0
08.05.2017, 22:44
1 ответ

После того как имя файла находится в переменной, вы можете использовать оператор оболочки расширения параметра, чтобы извлечь его часть. Затем подставьте это в команду sed. Ниже я использую оператор подстроки, чтобы получить 4 символа, начиная с позиции 20.

for file in rsa.collect.rsa-IB_L*.log.web1.decrypt; do
    orgname=${file:20:4}
    sed -i "s/orgname=[^&]*/orgname=$orgname/" "$file"
done
0
28.01.2020, 04:46

Теги

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