Я новичок в программировании оболочки и должен был выполнить следующую задачу. У меня есть файл со следующей строкой в строке № 28 (статический).shell: Замена части строки в файле
page.sysauth = "Admin"
Я хотел бы заменить эту строку, используя сценарий оболочки каждый раз, когда будет создана новая запись в sysauth.
page.sysauth = { "Admin", "корень"} page.sysauth = { "Admin", "корень", "newAdmin"} т.д.
Кроме того, я хотел бы, чтобы удалить записи из эта переменная sysauth
page.sysauth = {"Admin", "root", "newAdmin"}
page.sysauth = {"Admin", "root"}
page.sysauth = "Admin"
Просьба указать указатели для достижения этой цели.
EDIT: Благодарим вас за ввод: Успение: Должна присутствовать первая запись. например: page.sysauth = "Admin" Сценарий не работает, если page.sysauth = ______ (пустой).
Вот мой рабочий сценарий sysauth_adt.sh
#!/bin/bash
add() {
sed -i~ -e '28 { s/= "\(.*\)"/= {"\1"}/; # Add curlies to a single entry.
s/}/,"'"$entry"'"}/ # Add the new entry.
}' "$file"
}
remove() {
sed -i~ -e '28 { s/"'"$entry"'"//; # Remove the entry.
s/,}/}/; # Remove the trailing comma (entry was last).
s/{,/{/; # Remove the leading comma (entry was first).
s/,,/,/; # Remove surplus comma (entry was inside).
s/{"\([^,]*\)"}/"\1"/ # Remove curlies for single entry.
}' "$file"
}
if (($# == 3)) ; then
file=$1
action=$2
entry=$3
if [[ $action == add ]] ; then
if head -n28 $1 | tail -n1 | grep -q $3 ; then
echo 0
else
add
fi
elif [[ $action == remove ]] ; then
if head -n28 $1 | tail -n1 | grep -q $3 ; then
remove
else
echo 0
fi
fi
else
echo "Usage: ${0#*/} file (add | remove) entry" >&2
exit 1
fi
Благодаря @choroba, Так что вы можете, пожалуйста, как мы можем отдельно проверить, если шаблон существует в данный конкретный номер строки. Так что дубликатов можно избежать. – Haswell
@Tegra: Как я уже говорил, я, вероятно, буду использовать Perl. – choroba