команда sed не заменяет правильно

Estaba buscando lo mismo y finalmente escribí una herramienta basada en la respuesta de user43791 .

Por lo tanto, lo que está buscando es tal vez algo así:
https://github.com/atar-axis/TUM-tools/blob/master/moodle_grabber/moodle_grabber.sh

Debería ser muy fácil adaptar esto a cualquier otro sitio de shibboleth y se basa únicamente en wget!

-2
17.11.2016, 14:13
3 ответа

Попробуйте вместо этого:

sed -i "s|$LINEout|$LINEnew|" job.sh

Если под macOS вам нужно указать резервную копию, поэтому вам придется использовать это:

sed -i "" "s|$LINEout|$LINEnew|" job.sh

Примеры:

echo "foo
bar" > sample
cat sample 
foo
bar

rep=bar
sed -i.bak "s|$rep|baz|" sample
cat sample
foo
baz
cat sample.bak 
foo
bar

Протестировано с macOS X 10.11.6 и BSD sed

0
28.01.2020, 05:18

OK нашел ее. Спасибо @maulinglawns за ваши хиты ;) На самом деле разделители нужно менять так:

sed -i "s:$LINEout:$LINEnew:" job.sh
-2
28.01.2020, 05:18

Обратите внимание, что BSD (например, Apple OS/X) используют sed -i '' ... для редактирования на месте без резервного копирования, а GNU использует sed -i ... . В большинстве других систем sed не поддерживает редактирование на месте.

Оба получили это из perl с опцией -i. Поэтому, для переносимости, вы можете захотеть вернуться к perl, который также решит проблемы со специальными символами в переменной:

A=$LINEout B=$LINEnew perl -i -pe 's/\Q$ENV{A}\E/$ENV{B}/g' job.sh
0
28.01.2020, 05:18

Теги

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