-1
votes

Remplacer les valeurs dans une clé spécifique avec une chaîne

J'ai un fichier texte dans lequel certaines lignes sont sous la forme: xxx

et je souhaite remplacer les valeurs dans Key1 avec le texte_to_copy_x. Donc, je peux obtenir quelque chose comme: xxx

Comment puis-je traiter ce fichier à bash (préférable) ou python? Info: text_to_copy_x se termine par un espace blanc final que je ne veux pas envisager. Merci


2 commentaires

Où est text_to_copy fin - toujours à la fin de la ligne?


WRT que je ne veux pas considérer - ce n'est jamais une option, vous devez déterminer s'il faut y inclure dans le cadre du texte de remplacement ou non. Je suppose que vous voulez dire que je ne veux pas faire partie du texte que je copie dans Key1 = "..." .


3 Réponses :


-1
votes

Vous pouvez y parvenir avec sed xxx xxx


4 commentaires

Presque fait, seule une chose mineure parce que certains "text_to_copy_x" (pas tous) ont un espace blanc finissant que je ne veux pas copier. à l'intérieur de la valeur clé. Comment puis-je éviter ça? Pour le moment, le résultat est similaire à: une clé de texte = "text_to_copy_2" key2 = "value4", text_to_copy_2


Mis à jour la regex pour exclure l'espace blanc


Petit problème que je viens de remarquer. Certaines "text_to copy_x" ont un espace blanc à l'intérieur et avec votre dernière modification, seule la première partie est prise. Par exemple, je reçois "text_to" et non "text_to copy_x". Pouvez-vous mettre à jour la regex pour soutenir cela? Merci


Mise à jour de la regex



0
votes
awk -F'"' '$2!="" {print $1 "\042" substr($5,2) "\042" $3 "\042" $4 "\042" $5}
           $2=="" {print}' <(sed 's| *$||' input)
Firstly sed removes all trailing spaces from your input file, as you do not want to consider them.Then awk proceeds with that result, using " as delimiter.

3 commentaires

J'ai vu que j'ai une ligne avec 3 clés et autres avec 2 et que la commande SED avec 3 clés ne fonctionne pas. Il est possible de le mettre à jour pour avoir un nombre variable de clés? Par exemple, une ligne est: une clé de texte1 = "value1" key2 = "text_to_copy_2" key3 = "value4", text_to_copy_2


@Giacota Vous devriez ouvrir une nouvelle question pour cela. Aussi, voir quoi faire quand quelqu'un répond à votre question << a href = "https://stackoverflow.com/help/someone-answers"> Stackoverflow.com/help/someone-answers >.


Entendu. Tnx



0
votes

avec un SED qui a un drapeau -E code> pour utiliser ERES (E.G. GNU SED ou OSX / BSD SED):

$ sed -E 's/(key1=")[^"]*(".*,(.*[^[:space:]]))/\1\3\2/' file
some text key1="text_to_copy_1" key2="value2",text_to_copy_1
some text
some text key1="text_to_copy_2" key2="value4",text_to_copy_2
some text


0 commentaires