File1 contient: w / r "tous les mots ici" peut être un mot unique, deux mots, trois mots, etc. p> je veux Pour obtenir la corde entre le 4ème ":" et le 5ème ":". Donc, ce sera "n'importe quel mot ici". P> Mon idée initiale était de remplacer ":" Avec l'espace, utilisez-le à l'impression .. mais puisque la chaîne que je veux extraire peut être composée de plusieurs mots, il ne travaillera pas avec précision. p> p>
3 Réponses :
dans votre exemple, P> La commande code> CUT code> vous permet de scinder une ligne en fonction d'un délimiteur et d'extraire les champs requis de celui-ci
avec ou en créant un tableau avec awk code>
ifs code> modifié en
: p >
$ IFS=: words=( $(echo 'a:b:c:d:any words here:e:f:G') ); echo ${words[4]}
any words here
S'il ne s'agit que d'une entrée de ligne, vous pouvez utiliser la bish regex. C'est plus une douleur si vous voulez retourner plus d'un champ, mais pour 1 champ, il est assez facile:
f=3 [[ "1:2:3:4:5:6:7:8" =~ (^([^:]*:){$f,$f})([^:]*)(:|$) ]] echo "${BASH_REMATCH[3]}" 4
Utilisez AWK pour imprimer code> Vous pouvez choisir le séparateur.
AWK -F: CODE> Utilisez
Couper code>.
@Kamilcuk Pouvez-vous s'il vous plaît élaborer? Merci!
Echo 'A: B: C: D: Tous les mots ici: E: F: G' | CUT -F 5 -D: Code>