Найдено эту тему среди других, и я согласен, что содержит наиболее полные ответы так Я тоже добавляю:
1) sed и ed настолько полезны ... вручную! Посмотрите на этот код из @Johnny:
sed -i -e 's/abc/XYZ/g' /tmp/file.txt
2) когда мое ограничение использовать его с помощью скрипта, то, никакая переменная не может быть использована внутри вместо аЬс или XYZ! This, похоже, согласен с тем, что я понимаю, по крайней мере. Таким образом, я не могу использовать:
x='abc'
y='XYZ'
sed -i -e 's/$x/$y/g' /tmp/file.txt
#or,
sed -i -e "s/$x/$y/g" /tmp/file.txt
но, что мы можем сделать? Как сказал @Johnny, используйте «во время чтения ...», но, к сожалению, это еще не конец истории. Следующие хорошо работали со мной:
#edit user's virtual domain
result=
#if nullglob is set then, unset it temporarily
is_nullglob=$(shopt -s | egrep -i '*nullglob')
if [[ is_nullglob ]]; then
shopt -u nullglob
fi
while IFS= read -r line; do
line="${line//'<servername>'/$server}"
line="${line//'<serveralias>'/$alias}"
line="${line//'<user>'/$user}"
line="${line//'<group>'/$group}"
result="$result""$line"'\n'
done < $tmp
echo -e $result > $tmp
#if nullglob was set then, re-enable it
if [[ is_nullglob ]]; then
shopt -s nullglob
fi
#move user's virtual domain to Apache 2 domain directory
......
3) Как можно видеть, если nullglob установлен, то он ведет себя странно, когда есть строка, содержащая *, как в
<VirtualHost *:80>
ServerName www.example.com
который становится
<VirtualHost ServerName www.example.com
нет конца угловой кронштейн и Apache2 не может даже загрузиться!
4) Этот вид разбора должен быть медленнее, чем поиск и замена одним нажатием, но, как вы уже видели, существует 4 переменных для 4 разных шаблонов поиска, которые работают только в одном цикле разбора!
Наиболее подходящее решение, о котором я могу думать с данными предположениями о проблеме.
За исключением того, что вызов mv в значительной степени похож на «non Bash» как на использование sed. Я почти сказал то же самое о эхо, но это встроенная оболочка. – slim
Я знаю, что это немного позже, но для других гуглеров: я не думаю, что вы хотите, чтобы там было, если вы не хотите, чтобы ваши оригиналы с дополнительным e в конце. Вы можете оставить это, -op аргумент аргумента будет интерпретироваться как сценарий или сделать '-i -e' – Adam
Однако аргумент -i для sed не существует для Solaris (и я думаю, некоторые другие реализации), поэтому имейте это в виду. Просто потратил несколько минут на то, чтобы понять, что ... – Panky