Bash - удалить все содержимое файла, начиная с указанной c строки - PullRequest
1 голос
/ 09 апреля 2020

В файле yml есть строка, содержащая: # base config. Теперь я хочу удалить все из этого файла, начиная с указанной строки c. Я тоже хочу удалить эту строку. Есть ли для него команда?

bash file

for filename in ./config/*.yml; do
    if grep -qxF "# base config" $filename
    then
        echo "has base config, will replace it"
        sed -i "" "# base config/q" $filename # this does not do anything
    else
        echo "has NOT base config, will add it"
        cat $base_config >> $filename
    fi
done

1 Ответ

3 голосов
/ 09 апреля 2020

С помощью sed:

sed -n '/#base config/q;p' file

Или с помощью awk:

awk '/#base config/{exit};1' file

Таким образом, вы можете заменить строку sed в вашем скрипте на эти два:

sed -n '/#base config/q;p' "$filename" > tmpfile
mv tmpfile "$filename"

Обратите внимание, я дважды цитировал переменную, это хорошая практика.

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