0
votes

Comment extraire des chaînes entre Nth et Mth Sevencident d'un certain caractère dans Linux Bash?

File1 contient: xxx

w / r "tous les mots ici" peut être un mot unique, deux mots, trois mots, etc.

je veux Pour obtenir la corde entre le 4ème ":" et le 5ème ":". Donc, ce sera "n'importe quel mot ici".

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.


3 commentaires

Utilisez AWK pour imprimer Vous pouvez choisir le séparateur. AWK -F: Utilisez Couper .


@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:


3 Réponses :


2
votes

La commande CUT vous permet de scinder une ligne en fonction d'un délimiteur et d'extraire les champs requis de celui-ci

​​dans votre exemple, xxx > devrait vous donner xxx


0 commentaires

2
votes

avec awk code> xxx pré>

ou en créant un tableau avec ifs code> modifié en : p >

$ IFS=: words=( $(echo 'a:b:c:d:any words here:e:f:G') ); echo ${words[4]}
any words here


0 commentaires

0
votes

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


0 commentaires