У меня есть простой скрипт, который дает мне некоторые значения из файла. Я использую sed, чтобы получить эти vaules (синтаксис приведен ниже). до вчерашнего дня эти команды работали нормально. но теперь я не получаю никакого значения, когда запускаю эту команду. Я ничего не менял, поэтому очень удивлен, что такое причина. кто-нибудь может сказать мне, как я могу отладить свою проблему? ниже текст файла:
May 1 11:59:31 box2 kernel: usb 1-3: new high speed USB device using ehci_hcd and address 24
May 1 11:59:31 box2 kernel: usb 1-3: New USB device found, idVendor=0411, idProduct=0105
May 1 11:59:31 box2 kernel: usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=5
May 1 11:59:31 box2 kernel: usb 1-3: Product: USB-SATA Bridge
May 1 11:59:31 box2 kernel: usb 1-3: Manufacturer: BUFFALO
May 1 11:59:31 box2 kernel: usb 1-3: SerialNumber: 00001412AA38
May 1 11:59:31 box2 kernel: usb 1-3: configuration #1 chosen from 1 choice
May 1 11:59:31 box2 kernel: scsi27 : SCSI emulation for USB Mass Storage devices
May 1 11:59:38 box2 kernel: scsi 27:0:0:0: Direct-Access BUFFALO External HDD PQ: 0 ANSI: 2 CCS
May 1 11:59:38 box2 kernel: sd 27:0:0:0: Attached scsi generic sg6 type 0
May 1 11:59:38 box2 kernel: sd 27:0:0:0: [sdf] 976773168 512-byte logical blocks: (500 GB/465 GiB)
May 1 11:59:38 box2 kernel: sd 27:0:0:0: [sdf] Write Protect is off
May 1 11:59:38 box2 kernel: sd 27:0:0:0: [sdf] Assuming drive cache: write through
May 1 11:59:38 box2 kernel: sd 27:0:0:0: [sdf] Assuming drive cache: write through
May 1 11:59:38 box2 kernel: sdf: sdf1
May 1 11:59:38 box2 kernel: sd 27:0:0:0: [sdf] Assuming drive cache: write through
May 1 11:59:38 box2 kernel: sd 27:0:0:0: [sdf] Attached SCSI disk
сценарий:
SERIAL=$(sed -n '5s/A.*: //p' filename)
SIZE=$(sed -n '10s/A.*: //p' filename)
MOUNT=$(sed -n '14s/A.*: //p' filename)
Могу только предположить, что вы соответствовали заглавной букве A в апреле, и она больше не работает, потому что сейчас май.
Может быть, вместо «А» стоит использовать «^».
Помимо того, что говорит @wfaulk, если предоставленный текст - это то, что вы используете, тогда числа должны быть 6,11,15.
SERIAL=$(sed -n 's/.*SerialNumber: \(.*\)/\1/p' filename)
SIZE=$(sed -n 's/.*logical blocks: \(.*\)/\1/p' filename)
может быть надежнее. Я не вижу лучшего способа получить точку монтирования с предоставленными данными.
Из комментариев
MOUNT=$(sed -n 's/.* sd[a-z]: \(.*\)/\1/p' filenaem)
Что-то в файлах журналов может исчезнуть из-за ротации журналов. В прошлый раз, когда мне приходилось делать это, я нашел очень полезной утилиту lshw. Например, lshw -class disk -quiet
выполнит ваши потребности. lshw по умолчанию доступен в ubuntu и также доступен для centos / redhat (http://www.ducea.com/2006/06/03/install-lshw-on-rhel-fedora-centos/).
Я знаю, что это не по теме, но надеюсь, что это полезно для OP.