Вы можете упростить набор «похожих» sed замен до следующего:
cat replace.sh
#!/bin/bash
replace () {
var=$2
new_val=$3
sed -e "s/^$var *= *.*/$var = $new_val/; s/^$var [^=]*$/$var $new_val/" "$1" | grep $var
}
replace test.conf setting1 value1new
replace test.conf setting2 value2new
replace test.conf setting3 value3new
replace test.conf setting4 value4new
Использование :
bash replace.sh
Вывод:
setting1 value1new
setting2 = value2new
setting3 = value3new
setting4 = value4new
Эта версия пакета предполагает, что вы используете Grub Legacy (0,97), который в соответствии с этим: https://wiki.archlinux.org/index.php/Boot_loaders , не поддерживает UEFI. См. эту статью для других загрузчиков, которые можно использовать.
Также, чтобы избежать путаницы, пожалуйста, имейте в виду, что Arch называет Grub 2 «Grub» и Grub .97 «Grub Legacy».
-121--174004-Один из быстрых способов сделать это:
echo "cd /home/user/Download" >> ~/.bashrc
Теперь каждый раз, когда вы открываете терминал, он сразу же выполнит cd/home/user/Download
.
Если вы настаиваете на использовании sed, можно использовать две последовательные команды s
. Во избежание выполнения второй команды после первой в той же строке добавьте команду t
между ними; пропускает все оставшиеся команды, если предыдущая команда s
произвела замену.
sed -e "s/\"select[^\";]* where /&admin_id = '\$admin_id' and /" -e t \
-e "s/\"select[^\"]*/& where admin_id = '\$admin_id' /" \
-i *.php
Остерегайтесь, что это не надежно: он не справится с выбрать
предложения, где выбор поля разбит на несколько строк, он не справится с запросами, которые не имеют где
, но, например, группа по
в одной строке, он испортится, если запрос содержит где
в качестве подстроки и т.д. Просмотрите входные и выходные данные, чтобы убедиться, что вы не попали ни в один из проблемных случаев.
С помощью оператора perl можно использовать оператор non-gredy repeat для прекращения сопоставления в первом зарезервированном слове или конце запроса. Это все еще приблизительно, но немного более надежно. Perl также допускает, чтобы замена была произвольным выражением, которое конструирует последовательность замены (с суффиксом e
после замены), поэтому мы можем поставить туда условное.
perl -i -p -e '
s[("select.*?)(\b(?:where|group|having|order|limit|procedure|into|for|lock)\b|[;"]|$)]
[$1 . " where admin_id = '\$admin_id' " . ($2 eq "where" ? "and" : $2)]e
' *.php
P.S. что ... «» $ admin _ id «»...
выглядит как SQL-инъекция, ожидающая, если только $ admin _ id
не может содержать '
(и я думаю, что плохо сформированные UTF-8 тоже могут быть проблематичными).