Unix cut sauf les deux derniers jetons
j'essaie d'analyser les noms de fichiers dans un répertoire spécifique. Les noms de fichiers sont de format:
token1_token2_token3_token(N-1)_token(N).sh
je dois couper les jetons en utilisant le délimiteur '_'
, et j'ai besoin de prendre la chaîne sauf les deux derniers jetons. Dans l'examlpe ci-dessus la sortie doit être token1_token2_token3
.
Le nombre de jetons n'est pas fixe. J'ai essayé de le faire avec l'option -f#-
de la commande cut
, mais je n'ai pas trouvé de solution. Des idées?
4 réponses
avec coupe:
$ echo t1_t2_t3_tn1_tn2.sh | rev | cut -d_ -f3- | rev
t1_t2_t3
rev inverse chaque ligne.
Le 3-
dans -f3-
signifie À partir du troisième champ jusqu'à la fin de la ligne (qui est le début de la ligne à travers le troisième et dernier champ dans le texte non lu).
vous pouvez utiliser la substitution de paramètre définie par POSIX:
$ name="t1_t2_t3_tn1_tn2.sh"
$ name=${name%_*_*}
$ echo $name
t1_t2_t3
il ne peut pas être fait avec cut
, Comment jamais vous pouvez utiliser sed
ou awk
sed -r 's/(_[^_]+){2}$//g'
Juste une autre façon d'écrire ysth la réponse de
echo "t1_t2_t3_tn1_tn2.sh"| rev / cut-d"_ " - f1,2 --complement / rev