S'il vous plaît, je voudrais extraire la chaîne juste avant '.fr'. Voici quelques lignes de mon dossier:
g-82.text.text1.fr.worker1
g-xx.yyyyyy.zzzz.fr.worker2
Je voudrais extraire ce texte:
g-82.text.text1
g-xx.yyyyyy.zzzz
S'il vous plaît, quelle commande je dois utiliser dans mon shell script? Je travaille sur la distribution Ubuntu Trusty Tahr 14.04.1 LTS.
Merci beaucoup.
Meilleures salutations.
ubuntu
shell-script
researcher
la source
la source
for f in $(cat FileNames.txt); do echo ${f%.fr.*}; done
. Si l’un des fichiers contient des blancs, vous devrez numériser le fichier avecwhile
boucle à la place, par exemplewhile f=$(line); do echo ${f%.fr.*}; done <FileNames.txt
. Notez que tous les noms de fichiers ne pas contenant.fr.
sera sortie vertatim.Réponses:
Vous pouvez utiliser un regex lookahead positif:
Documentation ici: http://www.rexegg.com/regex-lookarounds.html
la source
VAR=$(echo "g-xx.yyyyyy.zzzz.fr.worker2" | grep -Po '.*(?=.fr)')
VAR="$(...)"
[ajoutez les guillemets doubles] pour être sûr dans les situations où la chaîne contient des espaces.Utilisez le
sed
commander.Explication:
sed
supprimera la partie de la ligne correspondant à l'expression régulière.fr.*
de chaque ligne du fichier, laissant ainsi le contenu avant.fr
..fr.*
veux dire.fr.
suivi de rien.la source
echo 'villafranca' | sed 's/.fr.*//'
- & gt;vill
Essayer
cut -d'.' -f-3 <file_name.txt
-d
définit le "délimiteur de champ",Ne le mettez pas entre guillemets, il est donc "à l'abri de bash" (certains caractères ont une signification spéciale dans bash, c'est le moyen d'éviter les ennuis)
Effet ici - & gt; divisé en
.
caractères.-f
définit les "champs" à conserver, = & gt;-3
= & gt; Effet ici: du début à la troisième inclus.man cut
- pour plus d'options.la source