Как использовать bash для l oop с sed для многократного поиска и замены строки в файле? - PullRequest
0 голосов
/ 11 апреля 2020

Я не очень знаком с bash программированием. И я попытался написать скрипт bash, чтобы уменьшить мою работу. я хочу открыть файл in.lammps в каждой папке в этом каталоге и заменить строку в файле in.lammps. но это показывает такую ​​ошибку. и я тоже попробовал:

#!/bin/bash
for file in temp-*;
do
        cd $file;
        sed -i -f mycommands "$file/in.lammps";
done

вот содержимое файла 'mycommands':

s/0.080/0.039/g
s/2.45/2.93/g
s/2.625/3.382/g
s/Pt/AU/g

Вы что-нибудь знаете об этом? У меня есть 20 папок в этом каталоге, и мне нужно заменить некоторую строку в файле in.lammps.
введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

1 Ответ

1 голос
/ 11 апреля 2020

Погружение в каталогах на каждой итерации с cd просто добавит ненужную сложность вашему коду. Просто напишите

for file in */in.lamps; do
    sed -i -f mycommands "$file"
done

. Это позволит обнаружить все in.lamps в подкаталогах и применить sed к каждому.

Просто чтобы вы понимали, что происходит, вы можете поставить * За 1009 * до строки sed для вывода всех затронутых файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...