Я пытаюсь создать поиск и замену в одну строку, используя cat и sed, чтобы выполнить задачу внутри сценария оболочки. Вот где я сейчас нахожусь:
myscript.sh
содержит следующее:
date=$(date '+%Y%m%d'01)
ydate=$(date -d yesterday '+%Y%m%d'01)
cat myfile.txt | sed -r -n 's/$ydate/$date/'
Вот что я ожидаю: установлены переменные $ydate
и $date
иметь дату в формате yyyymmdd01
соответственно. Когда файл myscript.sh
выполняется, он использует cat
для передачи вывода myfile.txt
(myfile.txt
содержит дату вчерашнего дня в указанном формате) в команду sed
. sed
затем берет вывод cat
, находит дату вчерашнего дня и заменяет ее текущей датой в правильном формате.
Пока это не работает должным образом.
Я также пытался использовать "" вокруг команды sed
, без -n
, и я попытался указать файл myfile.txt
после команды sed
. Он все равно не найдет строку и не заменит ее.
Может кто-нибудь предложить мне некоторую помощь в том, как мне заставить это работать так, как задумано?
Заранее спасибо!
РЕДАКТИРОВАТЬ: myscript. sh содержимое:
#!/bin/sh
cd /var/named
date=$(date '+%Y%m%d'01)
ydate=$(date -d yesterday '+%Y%m%d'01)
# This line creates the serial number of the file
cat myfile.rpz | sed "s/$ydate/$date/" myfile.rpz
# This line opens the file at the end for easier editing
#nano +999999999 myfile.rpz
# This line restarts the named service, waits 5 seconds, then closes.
#service named restart
#sleep 5s
#exit
myfile.rpz содержимое:
$TTL 600
@ IN SOA dns1.mysite.com. root.localhost. (
2020042101 ; serial
1h ; refresh
30m ; retry
1w ; expiry
30m) ; minimum
IN NS localhost.
dns1.mysite.com IN A 172.16.1.18
dns2.mysite.com IN A 172.16.2.18
; Redirect this site to localhost to block
; List last consolidated on 12/11/2018
; DNS Blocks
*.mad IN CNAME *.
beans.com A 127.0.0.1 ; this is a test case
*.000webhostapp.com A 127.0.0.1
*.00h5.com A 127.0.0.1
*.00webhostapp.com A 127.0.0.1