Ввод разделен *
. Получите пятое поле:
$ cut -d '*' -f 5 tus.txt
222791885833
36
00081907
00082025
262105589241-20172-31489016
00081684
00082024
4578873831221
00082603
00082403
Это желаемый результат, который вы упомянули, но вы также говорите о его сортировке:
$ cut -d '*' -f 5 tus.txt | sort -u
00081684
00081907
00082024
00082025
00082403
00082603
222791885833
262105589241-20172-31489016
36
4578873831221
Если вы по какой-то причине хотите отсортировать исходные данные в этом поле (здесь не удаляются дубликаты):
$ sort -t '*' -k5,5 tus.txt
~TUS*21758767*4932626*B*00081684*Y*2707792
~TUS*21758806*4932668*B*00081907*Y*2707826
~TUS*21758861*4932693*B*00082024*Y*2707881
~TUS*21758851*4932694*B*00082025*Y*2707871
~TUS*21759295*4932379*B*00082403*Y*2708332
~TUS*21760350*4933404*B*00082603*Y*2708838
~TUS*21424565*4716129*B*222791885833*Y*
~TUS*21758862*4932739*B*262105589241-20172-31489016
~TUS*21470045*4733746*B*36*Y*19-OCT-16**B*2239681
~TUS*21758895*4932764*B*4578873831221*Y*
Потому что вы говорите это конкретно. В случае, если часть расширения оболочки оболочки была очевидна для вас, я полагаю, что ответ, который вам действительно нужен, был связан с путаницей, стоящей за вашим вопросом.
Вы путаете то, что вы даете ls, с тем, что вам дает ls. Хотя ls не дает вам скрытых каталогов / файлов, вы можете предоставить ему список скрытых каталогов / файлов. Что вы сделали, используя специально . *
(акцент сделан на .
, а не на *
).
Почему
ls. *
распечатывает содержимое скрытых каталогов?
Когда ls
задается каталог, он печатает содержимое этого каталога (по умолчанию, за исключением скрытых файлов в этом каталоге). С помощью ls. *
оболочка предоставила ls
список файлов и каталогов, начинающихся с .
Вы можете использовать set -x
, чтобы увидеть команду, вызываемую оболочкой (т. Е. После раскрытия глобусов оболочки).
Краткий ответ: расширение оболочки оболочки.
Оболочка принимает ваш ввод и расширяет часть . *
перед передачей в ls
, так что эффективно вы делаете:
$ ls .bash_history .bash_profile .bashrc .coin_history .emacs ...
Итак, он перечисляет каждую запись. Когда он видит запись в каталоге, он перечисляет содержимое этого каталога, как и следовало ожидать от ls
. Чтобы увидеть только файлы / каталоги в вашем рабочем каталоге, используйте параметр -d
для ls
:
$ ls -d .*
Параметр -d
сообщает ls
, чтобы «перечислить сами каталоги, а не их содержимое» (взято из справочной страницы ls
).
Когда вы это сделаете
$ ls directory
вы получите листинг каталога
. Если directory
является каталогом, будет перечислено его содержимое, в противном случае он будет перечислен как любой другой файл.
При выполнении
$ ls dir*
вы получите список всех вещей, которые соответствуют dir*
. Если что-то из этого является каталогом, вы увидите содержимое этих каталогов.
При выполнении
$ ls .*
вы получите тот же эффект, что и в предыдущем примере, только шаблон другой, и поскольку вы явно сопоставляете скрытые файлы и папки, они (сопоставленные) будут рассмотрены ls
.
Используйте ls
с флагом -d
, если вы не заинтересованы в просмотре содержимого папки (скрытой или нет). Это останавливает ls
от повторного обращения к любой найденной папке, которая соответствует заданному шаблону.