Используя sed, чтобы добавить строку, если она отсутствует, или заменить строку на неправильное значение - PullRequest
0 голосов
/ 08 января 2020

Как в bash с помощью sed я могу проверить, содержит ли строка use_authtok. * Sha512, а затем установить или добавить раунды = 5000? До сих пор я только понял, как добавить, если отсутствует, используя

sed 's/sha512/sha512 rounds=5000/g' 

ненадежным способом.

пример:

use_authtok try_first_pass sha512 remember=5
use_authtok try_first_pass sha512 remember=5 rounds=7000

желаемый вывод:

use_authtok try_first_pass sha512 remember=5 rounds=5000     # was missing here
use_authtok try_first_pass sha512 remember=5 rounds=5000     # changed from 7000

Ответы [ 2 ]

1 голос
/ 08 января 2020

Не могли бы вы попробовать awk тоже.

awk '
/use_authtok.*sha512/ && !sub(/rounds=[0-9]+/,"rounds=5000"){
  $0=$0 " rounds=5000"
}
1
' Input_file
1 голос
/ 08 января 2020

Вот так: :

$ awk '(/use_authtok.*sha512/){$5="rounds=5000"}1' file

Вывод:

use_authtok try_first_pass sha512 remember=5 rounds=5000
use_authtok try_first_pass sha512 remember=5 rounds=5000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...