Isso deve fazer o que você quer:
ls|sed 's/\..*//'|sort -u|column
Se o seu shell tem a largura do seu terminal em $ COLUMNS, então é melhor:
ls|sed 's/\..*//'|sort -u|column -c $COLUMNS
Eu quero definir um novo comando ls
para fazer algo assim
O primeiro quando eu uso o comando normal ls
:
$ls
undergrade.AI undergrade.KDD
undergrade.AI2 undergrade.micro
undergrade.ANN undergrade.OOT
undergrade.autoMata undergrade.OS
undergrade.bulletin undergrade.parallelAndDistributedProgramming
undergrade.CG undergrade.pop
undergrade.CLP undergrade.PPL
undergrade.comNet undergrade.researchingMethod
undergrade.comOr undergrade.SA
undergrade.comSec undergrade.SE
undergrade.DBMS undergrade.softwareTesting
undergrade.discrete undergrade.webApps
code.ajax code.cc code.erl code.html code.js code.pl code.py
code.sage code.x3d code.c code.cl code.go code.jquery code.lisp
code.pro code.roo code.sh code.xml
E para um novo ls que eu quero:
$ls_new
undergrade code
Eu quero mostrar apenas a primeira palavra quando eu digito ls_new
.
Por que eu quero esse comando?
Porque eu nomeei minhas pastas no padrão de category.subj
que são demais quando uso o ls
comum. então eu preciso de algum comando que possa filtrar, agrupar e mostrar, mas apenas o nome category
.
Outra maneira com awk
:
ls | awk -F. '$1 != p { p=$1; print $1}'
Tags command-line bash ls