J'ai un fichier texte qui a des lignes de différentes longueurs. Je dois faire ces uniformes afin que les développeurs de PLSQL fonctionnent la fonction d'importation de texte les lit correctement. Les lignes de 89 caractères doivent être remplies de 4 espaces à la fin. Pour une raison quelconque, l'argument -i à SED n'est accepté ni. P>
Le fichier peut être trouvé ici P>
J'ai essayé un certain nombre de commandes de regex différentes découvertes de diverses sources via Google, mais aucune d'entre elles ne fonctionne, que la «fonction ne puisse pas être analysée» ou qu'elle n'a pas ajouté les espaces nécessaires. P>
Le code que j'ai écrit qui fonctionnait à l'aide de Notepad ++ était de
Trouver: (^. {89}) ($)
Remplacez: \ 1 \ 2
p>
J'ai essayé un certain nombre de commandes UNIX SED telles que
sed -e "s / (^. {89}) ($) / \ 1 \ 2 /" fichier.txt code>
Sed -e "S / (^. {89}) ($) / \ 1 \ s \ s \ s \ s \ 2 /" fichier.txt code>
sed -e "s / (^. {89}) ($) / \ 1 \ \ \ \ \ 2 /" fichier.txt code>
sed -e "s / \ \ \ \ {89 \ \ \ \) \ ($ \ \) / \ 1 \ \ \ \ 2" fichier.txt code>
Sed -e 'S / \ \ (^. \ {89 \ \ \ \) \ ($ \ \) / \ 1 [[[[Space:]] \ 2 / g' file.txt code>
Sed -e 's / \ \ (^. \ {89 \ \ \ \ \ \ {89 \ \ \ \) \ ($ \ \) / \ 1 [[[Space:]]] \ {4 \} \ 2 / g' file.txt Code>
SED -E 'S / (^. {89}) ($) / \ 1 [[[[SPACE:]]] {4} \ 2 / g' file.txt code> p >
3 Réponses :
Le problème principal ici est que vous utilisez la syntaxe BRE POSIX et UNESCAPÉD Ceci devrait fonctionner: P> Le Si vous devez utiliser l'option ( code> /
) code> sont traités comme des parenthèses littérales et sans échéance
{ code> /
} code> est traité comme des accolades littérales.
sed 's/^.\{89\}$/& /' file.txt > newfile.txt
^ code> - correspond au début d'une ligne li>
. \ {89 \} code> - correspond à tous les caractères 89 li>
$ code> - affirme la position finale. LI>
ul>
et code> dans le remplacement fait référence à l'ensemble de la correspondance. P>
-i code>, voir SED Modifier le fichier en place . p> p>
Merci @wiktor mais cela n'abandonne que le même fichier texte sans espaces supplémentaires ajoutés aux lignes.
@Paulwright Quelle est votre version code> SED code>? OS? Look, La commande sed code> fonctionne
.
OS semble être HP-UX 11i version 3 février 2007. La commande -v ne fonctionne pas pour me montrer la version de SED.
@Paulwright Je ne trouve aucun détail à ce sujet. Je me demande si & code> est pris en charge. Essayez
sed 's / ^ \ \ \ \ \ \ {89 \} \) $ / \ 1 /' file.txt> newfile.txt code>
Même résultat que j'ai peur. Je ne pense pas qu'il y ait une solution facile sur HP-UX.
@Paulwright J'ai vu de tels environnements où {m} code> ne sont tout simplement pas pris en charge. Pouvez-vous s'il vous plaît essayer
echo "1234567890" | SED 's /^............$/
&
On dirait qu'il a ajouté un espace à la fin de la chaîne. J'ai besoin de taper 89. Il faut le faire travailler alors?
@Paulwright Eh bien, je crains que ce soit le seul moyen de sortir.
Je viens d'essayer cela avec le fichier. Cela fonctionne jusqu'à ce que j'utilise le caractère final de la ligne. Alors il ne semble pas trouver un match?
Essayez ceci:
awk '{ <br> diff = 89 - length($0); <br> for(i=1;i<=diff; i++) <br> { <br> $0 = $0 "a" <br> } <br> print $0 <br> } <br> ' FileName.txt
Outils logiciels Kudge pour HP-UX, basé sur Ses manuels : < Pré> xxx pré>
Comment ça marche: p>
SED code> pour créer un flux factice du même nombre de lignes que fichier em>, mais avec quatre espaces de chaque ligne. LI>
- Utilisez
coller code> pour ajouter le flux factice à ce qui est dans fichier em>. (En raison du -d '' ' code> il ajoute cinq em> espaces, mais cela ne comporte pas beaucoup.) Li>
- Utilisez
couper code> pour couper quelque chose sur 93 em> octets. Li>
ol> si hp-ux em> sed code> est encore moins comme gnu em> SED code> que j'ai supposé, il pourrait être remplacé par un certain équivalent comme: p> xxx pré> p>
Êtes-vous sur Mac OS? Essayez
sed -i '' '' S / ^. \ \ {89 \} $ / & / / / / / / / / / / / / / / code> (avec 4 espaces après
& code>). Dans POSIX BRE motifs,
{m, n} code> Quanifier doit avoir des accolades échappées. Si
-I code> ne fonctionne toujours pas, utilisez
SED 'S / ^. \ \ \ {89 \} $ / & & & & & & & & &' File.txt> Newfile.txt code>
Mieux mettre un exemple de texte ere.
Que voulez-vous dire que l'option
-i code> "n'est pas acceptée"? N'incluez pas la fin de la ligne
$ code> en tant que groupe de capture avec
($) code>. C'est inutile et ne fonctionnera pas. Avez-vous essayé
sed -e "s / (^. {89}) $ / \ 1 /" fichier.txt code>?
@Lurker passant à -i à sed que je reçois "SED: option illégale - je". Je viens d'essayer votre commande et que l'erreur "ne peut pas être analysée".
Désolé, j'étais un peu précipité dans mon suggéré. Essayez ceci:
sed -e "s / ([^.] {89}) $ / \ 1 /" file.txt code>
@Lurker Quelque succès. Cette commande, y compris des échappements pour les () {}, des espaces ajoutés, mais des extrémités de la ligne supprimées. J'ai essayé de les ajouter avec
sed -e "s / \ ([^.] \ {89 \} \) \ ($ \ \) / \ 1 \ 2 /" code> mais pas de joie.
Le comportement de
sed code> sur votre système n'est pas le même que Linux. Cela ne devrait pas supprimer une fin de ligne. Le
$ code> est un jeton représentant la fin de la ligne, mais il ne faut pas avoir à être resserré dans le remplacement. Si ma suggestion a fonctionné mais la ligne enlevée se termine, vous pouvez remettre la ligne de ligne, éventuellement, avec
sed -e "s / ([^.] {89}) $ / \ 1 \ n / code>. Vérifiez également les options
SED CODE> dans la page CODE> SED CODE> MANUEL (
MAN SED CODE>) pour la manipulation de la ligne.
Je trouve plus d'articles où les gens ont des problèmes avec SED dans HP-UX. L'utilisation de la nouvelle ligne \ N ajoute simplement 'n' où la fin de la ligne devrait être, ce qui est ridiculement frustrant. Je continuerai à essayer différentes combinaisons de la commande.
Ce comportement de
\ n code> est ce dont je crains. Vous pouvez vérifier les options
SED CODE> car il peut y avoir une option qui la fait de la voir comme une fin de ligne. Je trouve toujours étrange qu'il gère la ligne de ligne si vous utilisez
$ code> sur la grée source. Je suppose qu'une autre option pourrait être
awk code>.