Оператор if then else выдает ошибку

Вариант идеи @Kusalanananda :

$ cat dict
sole:sun
penna:pen

$ sed -f <(sed -r 's!(.+):(.+)!s/\\<\1\\>/\2/g!' dict)   it.txt >en.txt
1
17.03.2017, 04:38
3 ответа

, вам нужно использовать обратные кавычки (`), чтобы команды работали , в коде, который вы указываете в своем вопросе, вы сравниваете две статические строки. `! = '

0
27.01.2020, 23:25

Я разобрался.

    #!/bin/bash
set -x
grep -q 'PASS_WARN_AGE    7' /etc/login.defs
if [ ${?} -eq 0 ]; then
        echo "RHEL-06-000054 not a finding"

grep -q 'PASS_WARN_AGE    0' /etc/login.defs
elif [ ${?} -eq 0 ]; then
        sed -ie 's/PASS_WARN_AGE\s\s\s\s0/PASS_WARN_AGE    7/g' /etc/login.defs; echo "RHEL-06-000054 patched"

else echo "needs further review"
fi
2
27.01.2020, 23:25

Вы можете просто безоговорочно запустить sed для файла, если хотите:

sed -i .bak -Ee 's/^PASS_WARN_AGE\s+0/PASS_WARN_AGE    7/' /etc/login.defs

Я бы с осторожностью использовал шаблон вроде \ s \ s \ s \ s , поскольку количество пробелов может отличаться. Я не думаю, что \ s является стандартным, но я полагаю, что если контекст - RHEL, у вас все равно будет GNU sed.

1
27.01.2020, 23:25

Теги

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