Disons que lorsque je commande ls, la sortie est:
file1 file2 file3 file4
Est-il possible d'afficher uniquement une certaine colonne de sortie, dans ce cas, fichier2? J'ai essayé ce qui suit sans succès:
echo ls | $2
Fondamentalement, tout ce que je veux faire est de faire écho à la deuxième colonne, dans ce cas, je veux faire écho:
file2
ls
sortie?ls
et après avoir créé des fichiers / dossiers, il se peut que ce ne soit plus ce que vous souhaitiez. Comme Terdon l'a souligné, il existe de meilleures façons d'obtenir ce que vous voulezRéponses:
La commande suivante formatera la sortie ls dans une colonne
la source
ls -1 /directory | head -2 | tail -1
ouls -1 /directory | perl -ne 'print if $. == 2'
ls | sed -n '1p;q'
semble plus simpleVous recherchez ceci:
Cependant, en supposant que vous essayiez d'utiliser ce nom de fichier ultérieurement, ne le faites pas, car les noms de fichiers contenant des espaces sont brisés. Au lieu de cela, placez les fichiers dans un tableau et obtenez le second, ce qui vous évite d'avoir à analyser du tout:
L'ordre dans lequel vous récupérez les fichiers dépend de la valeur de
LC_COLLATE
. En tant que tel, vous pouvez définir le paramètre enLC_COLLATE=C
premier si vous souhaitez un tri "standard" dans tous les cas.la source
1
par les coquilles sensibles (zsh, yash, fish, csh, tcsh, rc, es ...) et0
par ksh et bash. Pour une solution portable à tous Bourne comme des coquillages, vous pouvez utiliser: à laset -- *; printf '%s\n' "$2"
place.Vous auriez besoin d'ajouter en
-C
tantls
qu'utilise le mode colonne unique lorsque la sortie n'est pas un terminal.awk
affiche ensuite la deuxième colonne:la source
Je pense que tu cherches
Il n'affichera pas l'autorisation, le propriétaire, le groupe, la date, la taille ... mais un nom de fichier simple dans une seule colonne.
la source
Le seul moyen qui fonctionne pour moi est d'ajouter "-all". C'est:
Parce que
-all
ajouter plus de colonnes comme utilisateur, autorisations, etc.la source
Comme cela a déjà été mentionné, l'utilisation de colonnes pour l'analyse de la
ls
sortie n'est pas très robuste, car ellels
coupe les lignes en fonction de la longueur de votre nom de fichier et de la largeur du terminal. Cependant, il est souvent intéressant d’afficher une seule colonne d’une liste d’éléments. Vous pouvez le faire en utilisant la commande cut:Affichera
Notez que cela
-d
vous permet de sélectionner le délimiteur de colonne, donc par exemple avecvous pouvez afficher la deuxième colonne d'une liste séparée par des virgules.
la source
Supposons que si vous souhaitez afficher uniquement le nom de fichier particulier sous le chemin actuel, utilisez la commande ci-dessous.
commander:
la source
C'est délicat, car l'analyse
ls -C
dépend de:ls -C
)ls -C
sortie soit en colonne, mais peut être configuré avec un nombre d'espaces variable comme séparateur de champ.ls
options d'affichage choisies).Pour le moment, commençons par le problème le plus facile ( c’est-à-dire pas le numéro 4 ci-dessus), en supposant qu’il n’y ait pas d’espace dans les noms de fichiers . Pour imprimer la colonne n ° 2, ceci fonctionne:
Dérouler ça:
COLUMNS=$COLUMNS
garantit que la longueur de la colonne alimentée|
reste cohérente avec l’affichage actuel du terminal. Changer cela en une valeur arbitraire fonctionne aussi, doncCOLUMNS=50
ouCOLUMNS=70
auraitls -C
pour effet de réorganiser les choses en fonction de ces largeurs.Une autre méthode consisterait à utiliser le
-w
commutateur, par exemple :tr
rend les séparateurs de champs cohérents: un seul onglet entre chaque colonne.cut
affiche la colonne souhaitée.la source
changez le nombre de caractères (54) si nécessaire pour que vous n'obteniez que les données souhaitées.
la source
54-
coupe dit à chaque caractère à partir de la position 54; ça ne s'arrête pas à la colonne "reconnue par l'homme"