$ sed 's/-[[:alnum:]]*-[[:alnum:]]*$//' file
bucket,abc-def-ghi
bucket,dde-wwq-ooi
instance,jkl-mno-1-zzz
disk,pqr-stu-10-kuy
Здесь используется sed
для сопоставления двух последних подстрок, разделенных тире -в каждой строке, и их удаления. [[:alnum:]]
будет соответствовать любому буквенно-цифровому символу.
Вы можете сократить его до
sed 's/\(-[[:alnum:]]*\)\{2\}$//' file
т. е. сопоставить и удалить два набора -[[:alnum:]]*
в конце каждой строки.
В GNU awk
вы также можете
$ awk -F '-' 'BEGIN { OFS=FS } { NF -= 2; print }' file
bucket,abc-def-ghi
bucket,dde-wwq-ooi
instance,jkl-mno-1-zzz
disk,pqr-stu-10-kuy
но такое изменение NF
не является переносимым, и его следует избегать (нет гарантии, что это изменит текущую запись ). Например, это не будет работать с BSD awk
.
В стандарте awk
, не прибегая к использованию sub()
(, которое будет просто имитировать sed
), вам придется воссоздать текущую запись из полей, которые вы хотели бы использовать (в нашем случае., все поля, кроме двух последних дефисов -, разделены):
$ awk -F '-' 'BEGIN { OFS=FS } { nf = split($0,a) - 2; $0=""; for (i=1; i<=nf; ++i) $i = a[i]; print }' file
bucket,abc-def-ghi
bucket,dde-wwq-ooi
instance,jkl-mno-1-zzz
disk,pqr-stu-10-kuy
На самом деле это была проблема с файловой системой, о чем свидетельствуют различные страшные журналы.
$ dmesg
[1651808.506316] Buffer I/O error on device dm-13, logical block 3178496
[1651808.523043] EXT4-fs warning (device dm-13): ext4_end_bio:323: I/O error 3 writing to inode 140391 (offset 1652555776 size 4096 starting block 3178496)
[1651808.523045] Buffer I/O error on device dm-13, logical block 3178496
[1651808.539230] EXT4-fs warning (device dm-13): ext4_end_bio:323: I/O error 3 writing to inode 140391 (offset 1652555776 size 4096 starting block 3178496)
[1651808.539232] Buffer I/O error on device dm-13, logical block 3178496
[1651808.554126] EXT4-fs warning (device dm-13): ext4_end_bio:323: I/O error 3 writing to inode 140391 (offset 1652555776 size 4096 starting block 3178496)
[1651808.554128] Buffer I/O error on device dm-13, logical block 3178496
[1651808.570012] EXT4-fs warning (device dm-13): ext4_end_bio:323: I/O error 3 writing to inode 140391 (offset 1652555776 size 4096 starting block 3178496)
[1651808.570053] Buffer I/O error on device dm-13, logical block 3178496
[1651808.588767] EXT4-fs warning (device dm-13): ext4_end_bio:323: I/O error 3 writing to inode 140391 (offset 1652555776 size 4096 starting block 3178496)
[1651808.588809] Buffer I/O error on device dm-13, logical block 3178496
При дальнейшем осмотре оказалось, что диск был просто переполнен, ох:)
А также полезность, команда, которая, наконец, показала, что что-то действительно не так (, кроме прямой проверки файла)
rsync -avv --checksum vray-benchmark-5.00.01 joshuao: