sed: изменить файл, используя содержимое другого файла - PullRequest
3 голосов
/ 12 декабря 2011

У меня есть скрипт, который записывает IP-адрес в файл ip.txt

Я хочу заменить ip-адрес в html-файле на ip из ip.txt.

У меня есть выражение sed regex, совпадающее с IP-адресом, и я хочу заменить этот совпавший текст содержимым ip.txt:

"s/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}//g"

Как мне заставить sed извлечь содержимое ip.txt и поместить его в выражение s/<search>/<*HERE*>/g?

Есть ли лучший способ сделать это, чем этот?

sed -e "s/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/"`cat ip.txt`"/g"

Ответы [ 3 ]

4 голосов
/ 12 декабря 2011

Не так много улучшений, но вы можете заменить

"`cat ip.txt`"

с

$(<ip_txt)

, который будет заменен содержимым файла и несколько более эффективен, чем cat.

3 голосов
/ 12 декабря 2011

Вы можете прочитать IP в переменную оболочки перед запуском команды sed. Предполагая, что ip.txt представляет собой одну строку, содержащую только IP-адрес:

read -r ip < ip.txt
sed -e "s/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/$ip/g" file.html > newfile.html
mv newfile.html file.html
2 голосов
/ 12 декабря 2011

POSIX sed (и, следовательно, большинство доступных реализаций sed) поддерживает команду r file для чтения файла при совпадении строки.Пока вы не возражаете, чтобы результат содержал символы новой строки по обе стороны от того, где был IP-адрес, вы можете легко сделать это, используя r.В описании говорится:

[1addr] r rfile

Скопируйте содержимое rfile в стандартный выводкак описано ранее.Если rfile не существует или не может быть прочитан, он должен обрабатываться так, как если бы он был пустым файлом, не вызывая условия ошибки.

Это означает, что вы не получаетешанс отредактировать содержимое файла, в то время как если бы он был прочитан в пространство образца или место для хранения, вы могли бы затем изменить данные.

В этом случае замена командной строки примерно так же хорошакак вы можете сделать.

...