2011-09-24 8 views
0

J'ai un contenu de fichier comme celui-ciComment rechercher et remplacer dans une ligne à l'aide sed

sélectionnez b.id comme cli_id, b.login comme cli_login, b.pname comme cli_name, b.cname comme cli_company, b.phone comme cli_phone, b.email comme cli_email, (select (valeur/1.048.576) à partir des limites où limit_name = 'disk_space' et id = b.limits_id) comme Client_Package, b.cr_date, (sélectionner FROM_UNIXTIME (valeur, "% Y-% m-% d") à partir de Limites où nom_limite = 'expiration' et id = b.limits_id) en tant que Client_expire, Si (b.status = 0, 'Actif', 'Inactif') Cli_Status, a.name as dom_name, Si (a.status = 0, 'Actif', 'Inactif') comme Dom_Package, a.cr_date comme dom_create, (sélectionnez FROM_UNIXTIME (valeur, "% Y-% m-% d") depuis Limites où limit_name = ' expiration » et id = a.limits_id) comme dom_expire, (sélectionner (valeur/1.048.576) à partir des limites où limit_name = 'disk_space' et id = a.limits_id) comme Dom_Package, round ((a.real_size/1048576)) en tant que Dom_usage de domaines a, clients b où (sélectionnez FROM_UNIXTIME (valeur, "% Y-% m-% d") de Limites où nom_limite = 'expiration' et id = a.limits_id et (FROM_UNIXTIME (valeur, " % Y-% m-% d ") entre '2011-08-01' et '2011-12-01')) et a.cl_id = b.id groupe par a.id;

tout cela vient en une seule ligne

dans ce que je veux remplacer la partie seule date dans ce format

entre « 2011-08-01 » et « 2011-12- 01 '

Le script s'exécute tous les vendredis, supposons que je l'exécute le 10ème mois signifie.

le script besoin de changer la valeur dans le fichier comme celui-ci

entre « 2011-09-01 » et « 2012-01-01 »

chaque fois que le seul mois besoin changer dans ce format

entre '-1 mois du mois courant' et 'mois en cours + 3 mois'

sed -i 's/between '2011-08-01' and '2011-12-01'/'between '$(date --date="- 1 month" +%Y-%m)-01' and '$(date --date="+ 3 months" +%Y-%m)-01'/g file1 

dans ce code iam essayant de trouver et remplacer

mais montre cette erreur

sed: expression -e # 1, char 44: la commande `s sans terminaison

Quelle erreur iam peut-on expliquer?

Répondre

1

L'expression n'est pas correctement citée. Vous commencez par 's/... mais finissez par .../g. Pas de citation là-bas.C'est ce que j'ai couru et il a bien fonctionné:

sed -i "s/between '[0-9-]*' and '[0-9-]*'/between '$(date --date'-1month' +%Y-%m-01)' and '$(date --date'+3months' +%Y-%m-01)'/g" file1 
+0

Salut, cette commande ne fonctionne pour me..it donne une sortie infiniete de intergers utilisant ctr + c que j'ai besoin de briser cette sortie –

+0

sed -i « s/entre '[0-9 -] *' et '[0-9 -] *'/entre '$ (date -v'-1m' +% Y-% m-01) 'et' $ (date -v ' + 3m '+% Y-% m-01)'/g "/var/tmp/p.sql date: option invalide - 'v' Essayez' date --help 'pour plus d'informations. date: option non valide - 'v' Essayez 'date --help 'pour plus d'informations. –

Questions connexes