Utilisation de variables avec sed (UNIX)

J’essaie de lire un fichier journal et de créer un nouveau fichier avec uniquement les entrées après la date et l’heure données. Par exemple, je cherche seulement après le temps 07: 00: 00.000 dans le journal ci-dessous:

2015-01-16 00:00:00.001 DATA 2015-01-16 07:05:00.121 DATA 2015-01-16 07:10:15:543 DATA 

Irait à:

 2015-01-16 07:05:00.121 DATA 2015-01-16 07:10:15:543 DATA 

Je peux déjà faire fonctionner ceci avec:

 sed -n '/^2015-01-16 07/,$p' oglog.log > newlog.log 

Mais quand j’essaye d’append la date via une variable:

 date=$(date -d -1hour +'%Y-%m-%d %H') 

Je ne peux pas le faire fonctionner. Je sais que vous devez faire en sorte que le shell développe des variables via des guillemets simples ou doubles ( https://askubuntu.com/questions/76808/how-to-use-variables-in-sed-command ), mais avec l’un ou l’autre méthodes, il provoque des problèmes avec $p dans la partie remplacement de la commande sed. Comment puis-je obtenir le shell pour développer une variable mais pas l’autre et utiliser une commande similaire à celle ci-dessous?

 sed -n '/^$date/,$p' oglog.log > newlog.log 

 sed -n "/^$date/"',$p' oglog.log > newlog.log 

Vous voulez que le $date développé par le shell, donc il doit être entre guillemets. Vous ne voulez pas que le $p développé par le shell, donc il doit être entre guillemets simples. Vous pouvez également utiliser une barre oblique inverse pour empêcher le shell d’étendre ce $p , mais cela devient rapidement désagréable si vous avez d’autres barres obliques inverses significatives dans le regex:

 sed -n "/^$date/,\$p" oglog.log > newlog.log 

Utilisation

 sed -n "/^$date/,\$p" oglog.log > newlog.log 

les variables ne sont pas développées entre guillemets simples.

“Double quote” chaque littéral contenant des espaces / métacaractères et chaque extension: "$var" , "$(command "$var")" , "${array[@]}" , "a & b" . Utilisez 'single quotes' pour le code ou le littéral $'s: 'Costs $5 US' , ssh host 'echo "$HOSTNAME"' . Voir
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words