J’ai reçu 10 000 fichiers texte que je dois modifier.
La première ligne de chaque fichier contient une URL.
Par erreur pour quelques fichiers, l’URL manque de “com”
eg: 1) http://www.supersonic./psychology 2) http://www.supersonic./social 3) http://www.supersonic.com/science
ma tâche est de vérifier et d’append “com” s’il manque
eg: 1) http://www.supersonic.com/psychology 2) http://www.supersonic.com/social 3) http://www.supersonic.com/science
toutes les URL sont du même domaine (supersonic.com)
pouvez-vous me suggérer une approche rapide et facile?
J’ai essayé ceci: remplacer supersonic./
avec supersonic.com
sed -e '1s/supersonic.//supersonic.com/' *
pas de changement dans la sortie.
Vous êtes très proche de votre code, mais vous devez tenir compte du caractère /
après le .
carboniser.
En supposant que vous utilisez un sed
moderne avec l’option -i
(modification in-situ), vous pouvez le faire
sed -i '1s@supersonic\./@supersonic.com/@' *
Notez que plutôt que d’échapper à /
intérieur de s/srchpat\/withSlash/replaceStr/'
, vous pouvez utiliser un autre caractère après la commande the s
comme délimiteur, ici j’utilise s@...@...@
. Si votre modèle de recherche avait un caractère @
, vous devrez utiliser un caractère différent.
Certaines anciennes versions de sed
besoin de vous pour échapper au délimiteur alternatif à la première utilisation, donc
sed 's\@srchStr@ReplStr@' file
pour ces cas.
Si vous utilisez un sed
qui ne supporte pas les options -i
, vous devrez alors boucler votre fichier et gérer les fichiers tmp, c.-à-d.
for f in *.html ; do sed '1s@supersonic\./@supersonic.com/@' "$f" > /tmp/"$f".fix \ && /bin/mv /tmp/"$f".fix "$f" done
Attention
Mais comme vous parlez de 10 000 fichiers, vous voudrez faire des tests avant d’utiliser l’une de ces solutions. Copiez un bon ensemble aléatoire de ces fichiers dans / tmp / mySedTest / dir et exécutez l’une de ces solutions pour vous assurer qu’il n’y a pas de sursockets.
Et vous êtes susceptible de faire sauter la ligne de commande MAX_SIZE avec plus de 10 000 fichiers, alors lisez à propos de find et xargs. Il y a beaucoup de messages ici à propos de [sed] find xargs
. Vérifiez-les si nécessaire.
IHTH
Utilisez -i
pour changer les fichiers au lieu de simplement afficher les lignes modifiées.
Utilisez un délimiteur différent de /
si vous souhaitez utiliser /
dans le regex (ou utilisez \/
dans le regex).
Utilisez \.
faire correspondre un point littéralement,. correspond à n’importe quoi.
sed -i~ -e '1s=supersonic\./=supersonic.com/=' *
Certaines versions de sed
ne supportent pas -i
.