Лучший способ использовать sed для замены значения подстановочным знаком в нескольких файлах в Unix - PullRequest
0 голосов
/ 04 февраля 2019

Я делаю много маленьких однострочников - просто интересно, есть ли лучший способ - заметьте, я не очень против этого, просто интересно.

Проблема: заменить set timeout whatever на set timeout 10 в сценариях множественного ожидания:

mkdir .1111
for i in sssh*; do
    echo $i
    cat $i | sed "s:set timeout.*:set timeout 10:g" > .1111/$i
done
mv .1111/* .
rmdir .1111

Если у вас есть улучшения, пожалуйста, опубликуйте их.Бьюсь об заклад, это может быть сделано лучше в Perl, но я не там;)

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Во всех примерах find и sed, которые вы привели, я вижу, как происходит замена, но я не вижу, как на самом деле изменяется файл.Наверное, я никогда не понимал, что sed на самом деле будет редактировать файл и записывать его обратно?Я всегда использовал это с |следовательно, приходится обрабатывать временный файл и все такое ....

0 голосов
/ 05 февраля 2019

Общая идиома будет выглядеть примерно так:

find . -type f -name "sssh*" -print0 | xargs -0 sed -i 's:set timeout.*:set timeout 10:g'

Вы можете настроить аргументы на find в зависимости от расположения целевых файлов.

...