Многие, много способов. Вот несколько:
GNU GREP
$ ECHO 3.14.37-1-LTS | Grep -op '^ [^ -] *'
3.14.37.
SED
$ ECHO 3.14.37-1-LTS | Sed 'S / ^ \ ([^ -] * \). * / \ 1 /'
3.14.37.
Perl
$ ECHO 3.14.37-1-LTS | Perl -lne '/^(.*?)-/ && print $ 1
3.14.37.
или
$ ECHO 3.14.37-1-LTS | Perl -lpe 's /^(.*?)-.*/$ 1 /'
3.14.37.
или
$ ECHO 3.14.37-1-LTS | Perl -f- -lane 'Print $ f [0]'
3.14.37.
$ ECHO 3.14.37-1-LTS | awk -f- '{print $ 1}'
3.14.37.
CUT
$ ECHO 3.14.37-1-LTS | Cut -D- -F1.
3.14.37.
Оболочка, даже!
$ ECHO 3.14.37-1-LTS | в то время как IFS = - прочитайте B; сделать эхо "$ a"; Готово
3.14.37.
Похоже, вам нужны только имена файлов без каких-либо расширений. Если вы ищете одну трубу, чтобы выбить это, grep
не является вашим мэном. Попробуйте sed
:
$ find /lib /lib64 -type f -name '*lib*' | sed 's@/.*/@@;s@\..*$@@'
Вы можете направить в sort -u
для удаления дубликатов. Приведенная ниже команда была бы более точной при использовании awk
и cut
(или awk
снова - либо/или - cut
короче/красивее, IMHO):
$ find /lib /lib64 -type f -name '*lib*' | awk -F '/' '{print $NF}' | cut -d. -f1 | sort -u
Возвращает:
20-libgphoto2-6
40-либсане
klibc-P2s_k-gf23VtrGgO2_4pGkQgwMY
libBrokenLocale-2
libSegFault
libacl
libaio
libanl-2
libatasmart
libattr
libaudit
libblkid
libbsd
libbz2
libc-2
libcap
libcgmanager
libcidn-2
libcom_err
libcrypt-2
libcrypto
libdbus-1
libdevmapper
libdl-2
libe2p
libexpat
libext2fs
libfuse
libgcc_s
libgcrypt
libglib-2
libgpg-ошибка
libhistory
libjson-c
libkeyutils
libkmod
liblzma
liblzo2
libm-2
libmemusage
libmount
libncurses
libncursesw
libnewt
libnih
libnih-dbus
libnsl-2
libnss_compat-2
libnss_dns-2
libnss_files-2
libnss_hesiod-2
libnss_nis-2
libnss_nisplus-2
libntfs-3g
libpam
libpam_misc
libpamc
libparted
libpci
libpcprofile
libpcre
libpcsclite
libply
libply-boot-клиент
libply-splash-core
libply-splash-графика
libpng12
libpopt
libprocps
libpthread-2
libreadline
libresolv-2
librt-2
libselinux
libsepol
libslang
libss
libssl
libsystemd-демон
libsystemd-login
libthread_db-1
libtinfo
libudev
libulockmgr
libusb-0
либусб-1
либутиль-2
libuuid
libwrap
libz
В противном случае не требуется вырезать
для удаления всех расширений:
$ find /lib /lib64 -type f -name '*lib*' | awk -F '/' '{print $NF}' | sort -u
Возвращает:
20-libgphoto2-6.hwdb
40-libsane.rules
klibc-P2s_k-gf23VtrGgO2_4pGkQgwMY.so
libBrokenLocale-2.19.so
libSegFault.so
libacl.so.1.1.0
libaio.so.1.0.1
libanl-2.19.so
libatasmart.so.4.0.5
libattr.so.1.1.0
libaudit.so.1.0.0
libblkid.so.1.1.0
libbsd.so.0.6.0
libbz2.so.1.0.4
libc-2.19.so
libcap.so.2.24
libcgmanager.so.0.0.0
libcidn-2.19.so
libcom_err.so.2.1
libcrypt-2.19.so
libcrypto.so.1.0.0
libdbus-1.so.3.7.6
libdevmapper.so.1.02.1
libdl-2.19.so
libe2p.so.2.3
libexpat.so.1.6.0
libext2fs.so.2.4
libfuse.so.2.9.2
libgcc_s.so.1
libgcrypt.so.11.8.2
libglib-2.0.so.0.4000.0
libgpg-error.so.0.10.0
libhistory.so.6.3
libjson-c.so.2.0.0
libkeyutils.so.1.4
libkmod.so.2.2.5
liblzma.so.5.0.0
liblzo2.so.2.0.0
libm-2.19.so
libmemusage.so
libmount.so.1.1.0
libncurses.so.5.9
libncursesw.so.5.9
libnewt.so.0.52.15
libnih-dbus.so.1.0.0
libnih.so.1.0.0
libnsl-2.19.so
libnss_compat-2.19.so
libnss_dns-2.19.so
libnss_files-2.19.so
libnss_hesiod-2.19.so
libnss_nis-2.19.so
libnss_nisplus-2.19.so
libntfs-3g.so.841.0.0
libpam.so.0.83.1
libpam_misc.so.0.82.0
libpamc.so.0.82.1
libparted.so.0.0.1
libpci.so.3.2.1
libpcprofile.so
libpcre.so.3.13.1
libpcsclite.so.1.0.0
libply-boot-client.so.2.1.0
libply-splash-core.so.2.1.0
libply-splash-graphics.so.2.1.0
libply.so.2.1.0
libpng12.so.0.50.0
libpopt.so.0.0.0
libprocps.so.3.0.0
libpthread-2.19.so
libreadline.so.6.3
libresolv-2.19.so
librt-2.19.so
libselinux.so.1
libsepol.so.1
libslang.so.2.2.4
libss.so.2.0
libssl.so.1.0.0
libsystemd-daemon.so.0.0.10
libsystemd-login.so.0.7.1
libthread_db-1.0.so
libtinfo.so.5.9
libudev.so.1.3.5
libulockmgr.so.1.0.1
libusb-0.1.so.4.4.4
libusb-1.0.so.0.1.0
libutil-2.19.so
libuuid.so.1.3.0
libwrap.so.0.7.6
libz.so.1.2.8
То, что вы пытаетесь сделать, невозможно без повышенных привилегий или подрыва безопасности unix. У вас есть четыре варианта:
Если вы выберете третий вариант и добьетесь успеха, в зависимости от вашего морального компаса, вы должны сообщить о недостатке безопасности сопровождающим операционной системы. Вот несколько документов, чтобы начать: https://www.giac.org/paper/gsec/2235/quest-root-hacker-techniques-unix-security/103808
-121--174303-Теперь я смог сделать это
использовать учебное пособие, которое опубликовал Аркадиуш Драбчик: http://www.axllent.org/docs/view/auto-mounting-usb-storage/
составляют короткий сценарий, который ищет все папки, начинающиеся с usbhd в папке мультимедиа и синхронизируются с ними. Используйте «-rtuv» для форматов жира Windows, они не поддерживают семантику ПУАС. Все это приводит к этому сценарию:
sudo find /media -maxdepth 1 -name "usbhd*" | awk '
{
cmd = "rsync -rtuv --exclude '\''.*'\'' /home/pi/test "$0
system(cmd)
}' > /dev/null 2>&1
Добавьте строку в crontab, чтобы сценарий вызывался регулярно. Позвоните по телефону crontab -e
Добавить строку (вызывает скрипт каждый час):
0 * * * * . /scriptpath/myscript.awk
И это.