Это легко делается с помощью SED
:
$ ls /var/log/packages/*SBo | sed -r 's|.*/||; s/-[[:digit:]][[:digit:].]*-.*//'
webcore-fonts
winetricks
wireshark
wxGTK
Объяснение:
-R
Это позволяет расширенные регулярные выражения, которые уменьшают количество необходимых высказаний.
S |. * / ||
Это удаляет каталоги, которые предшествуют имя файла.
S / - [[: цифра:]] [[: цифра:].] * -. * //
Это выглядит номер, окруженный тиреми, и удаляет его и все, что следует. Regex использует [: цифр:]
вместо [0-9]
, чтобы обеспечить, чтобы он работает во всех локалях и с расширенным набором символов.
на Mac OSX, попробуйте:
ls /var/log/packages/*SBo | sed -E -e 's|.*/||' -e 's/-[[:digit:]][[:digit:].]*-.*//'
В вашем сценарии команда
является чтение со своего стандартного ввода; Если оно не принимает какой-то другой способ предоставления этой информации, вам необходимо продолжать кормить ее свой вклад таким образом. Поэтому, если вы не хотите использовать файл, Использование printf
с трубой:
printf "To: me@domain.com\nMessage: Some message" | command
Новые оболочки, такие как bash и ksh93, поддерживают «здесь документы» и «здесь строки», если вы хотите, чтобы буквальные строки передавались вашей команде на STDIN. Фактически, большинство оболочек поддерживают здесь документы.
Здесь строка:
command <<<"some string"
Здесь документ:
command <<END
this will be on
command's STDIN until
an END is encountered by itself
END
В этом документе в качестве признака конца используется элемент после <<
, обозначающий конец документа. Терминатор должен стоять сам по себе в начале строки. Различные оболочки имеют несколько более изящные возможности, такие как необязательное удаление ведущих табуляции, разные кавычки на терминаторе, определяющие, раскрываются ли переменные и метасимволы оболочки и т. Д. За подробностями обращайтесь к странице руководства вашей оболочки.
В любом случае вы можете довольно легко протестировать обе эти структуры, используя cat -
в качестве команды. Лично я очень часто использую здесь струны.