Вариант идеи @Kusalanananda :
$ cat dict
sole:sun
penna:pen
$ sed -f <(sed -r 's!(.+):(.+)!s/\\<\1\\>/\2/g!' dict) it.txt >en.txt
, вам нужно использовать обратные кавычки (`), чтобы команды работали , в коде, который вы указываете в своем вопросе, вы сравниваете две статические строки. `! = '
Я разобрался.
#!/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
Вы можете просто безоговорочно запустить 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.