1 votes

Aide nécessaire pour ajouter du texte à la fin d'une chaîne de caractères en utilisant la commande "sed" dans le Terminal

Dans Terminal.app, j'ai utilisé le curl ftp ... pour obtenir une liste des dossiers et des fichiers de l'ordinateur de mon ami et j'ai dirigé la sortie vers un fichier appelé "curlFTP.txt". Chaque ligne de ce fichier ressemble aux 3 exemples suivants...

  • drwxr-xr-x 1 nobody Root 4096 Aug 02 2014 WEDDING_SINGER_4X3
  • drwxr-xr-x 1 nobody Root 4096 Aug 02 2014 WEEKEND_AT_BERNIES
  • drwxr-xr-x 1 nobody Root 4096 Aug 02 2014 WEIRD_SCIENCE

De chacune de ces lignes de ce fichier, je n'ai besoin de garder que les noms des répertoires, qui seraient...

  • CHANTEUR_DE_MARRIAGE_4X3
  • WEEK-END_À_BERNIES
  • WEIRD_SCIENCE

Utilisation de la cut -c 52- j'ai pu extraire uniquement ces noms de dossiers que j'ai ensuite dirigé vers un fichier que j'ai nommé "curlFTP2.txt".

La prochaine étape que je devais faire était de faire précéder chaque ligne du fichier "curlFTP2.txt" avec le texte... curl ftp://1.1.1.1/Disk\ 1\ Movies/Movies\ 1/ et diriger sa sortie vers un fichier nommé "curlFTP3.txt". Maintenant, chaque ligne du fichier "curlFTP3.txt" devrait ressembler aux trois exemples suivants...

curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/WEDDING_SINGER_4X3
curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/WEEKEND_AT_BERNIES
curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/WEIRD_SCIENCE

Voici la commande complète que j'ai utilisée, qui a fonctionné incroyablement bien et a été extrêmement rapide, compte tenu du fait qu'il y avait 760 lignes dans le fichier à modifier.

cat curlFTP.txt | cut -c 52- > curlFTP2.txt ; sed 's|^|curl ftp://1.1.1.1/Disk\ 1\ Movies/Movies\ 1/|g' curlFTP2.txt > curlFTP3.txt

(l'adresse IP utilisée ici est un substitut de l'adresse IP que j'ai réellement utilisée)

C'est là que je suis bloqué ce que je dois faire, c'est utiliser la fonction sed avec la commande -e afin que je puisse ajouter un sed au code ci-dessus et ajoutez un "/" à la fin de chaque ligne de ce fichier car chaque liste est un répertoire.

J'ai besoin que chaque ligne ressemble à ceci : curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/WEDDING_SINGER_4X3/ Au lieu que chaque ligne ressemble à : curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/WEDDING_SINGER_4X3

J'ai réussi à comprendre qu'en utilisant le sed 's|^|blah|g' par exemple, le caractère "^" signifierait l'ajout de "blah" au début de chaque ligne.

Voici donc ma question existe-t-il un caractère similaire que je peux utiliser, comme le caractère "^", qui me permettrait d'utiliser la fonction sed pour ajouter du texte à la fin de chaque ligne ?

1 votes

Oui, c'est vrai : $

0 votes

Mec, tu es génial Merci beaucoup mon frère.

0 votes

Vous n'avez pas besoin cat , | o cut Vous pourriez le faire en une seule étape avec, par exemple, : sed -E -e 's|^.*[A-Za-z]{3}[ ][0-9]{2}[ ][0-9]{4}[ ]|curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/|' -e 's|$|/|' curlFTP.txt > newfile.txt

1voto

user3439894 Points 52496

Voici donc ma question existe-t-il un caractère similaire que je peux utiliser, comme comme le caractère "^", qui me permettrait d'utiliser la commande sed pour ajouter d'ajouter du texte à la fin de chaque ligne ?

Oui, c'est vrai : $

Ceci dit, en regardant ce qui se passe, laissez-moi vous proposer une solution globale différente où vous n'avez pas besoin de commencer :

cat curlFTP.txt | cut -c 52- > curlFTP2.txt

Vous pouvez traiter le curlFTP.txt fichier directement et complètement avec sed :

sed -E -e 's|^.*[A-Za-z]{3}[ ][0-9]{2}[ ][0-9]{4}[ ]|curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/|' -e 's|$|/|' curlFTP.txt > newfile.txt

Vous pourriez même éliminer > newfile.txt en utilisant le -i option de la sed commande :

i extension
Modifiez les fichiers sur place, en sauvegardant les sauvegardes avec les paramètres spécifiés. extension . Si une longueur de zéro extension est donné, aucune sauvegarde ne sera sauvegardée. Il n'est pas recommandé de donner une longueur nulle à la variable extension quand l'édition de fichiers sur place, car vous risquez une corruption ou un contenu partiel dans des dans des situations où l'espace disque est épuisé, etc.

sed -i'.bak' -E -e 's|^.*[A-Za-z]{3}[ ][0-9]{2}[ ][0-9]{4}[ ]|curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/|' -e 's|$|/|' curlFTP.txt

Utilisation de https://regex101.com pour expliquer le regex utilisé dans le sed commande :

enter image description here

Ce qui correspond par exemple :

drwxr-xr-x 1 nobody root 4096 Aug 02 2014

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X