Программы, которые посылают и получают данные таким образом, являются файловыми системами или драйверами (в зависимости от того, как вы определяете эти термины, они могут быть слишком широкими или слишком узкими определениями). Важным моментом является то, что [114486]некоторые [114487] из этих программ используют аппаратное устройство для хранения и получения данных, посылаемых через этот интерфейс; но не все.
Interval Since Last Panic Report: 472 sec
Panics Since Last Report: 2
Anonymous UUID: D89B5624-FF95-48B5-8F55-0987EA2D2466
Sun Jun 26 18:02:46 2011
panic(cpu 0 caller 0x6e085e4a): "ntfs_map_runlist_nolock(): Called for $MFT/$DATA!\n"@/SourceCache/ntfs/ntfs-65.5/kext/ntfs_attr.c:245
Backtrace (CPU 0), Frame : Return Address (4 potential args on stack)
...
Kernel Extensions in backtrace (with dependencies):
com.apple.filesystems.ntfs(3.4)@0x6e05a000->0x6e0b9fff
BSD process name corresponding to current thread: mount_ntfs
Некоторые примеры файловых систем, которые [114488]не[114489] используют устройство для хранения данных (по крайней мере напрямую) являются:
Файловые системы, использующие просмотренные или вычисленные данные. Примером является Proc, так как он получает данные из различных модулей ядра. Экстремальным примером является πfs ( github.com/philipl/pifs )
Все файловые системы FUSE, которые обрабатывают данные с помощью обычной программы пользовательского пространства
Файловые системы, которые преобразуют данные другой файловой системы "на лету", например, используя шифрование, сжатие или даже аудиокодирование ( khenriks.github.io/mp3fs/ )
Операционная система Plan9 ( [114496]http://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs[114497] ) является экстремальным примером использования файлов в качестве общего программного интерфейса.[114139].
$ awk '!f{print} /----------------------/{f=!f;if (!f)print "Deleted up to this point"}' foo.txt
---------------------------------------------------------------------- Cap in MB
Deleted up to this point
---------------------------------------------------------------------- Cap in MB
Deleted up to this point
---------------------------------------------------------------------- Cap in MB
Deleted up to this point
Этот скрипт имеет одну вариабельную f
. Когда F
верно (1), мы находимся в диапазоне строк, которые будут удалены. Когда он ложь (0), мы находимся в диапазоне, которые должны быть напечатаны.
По умолчанию f
false, когда запускается программа.
! F {Print}
Распечатайте любую строку, когда F
неверно.
/ ------------------------ / {f =! F; если (! F) Печать "удаляется до этой точки"}
Если мы достигнем линии делителя, отмеченной тиреми, затем переверните значение f
. Если F теперь false, затем распечатайте сообщение «Удаленное» сообщение.
По умолчанию awk на Solaris, кажется, имеет проблемы. Попробуйте:
nawk '!f{print} /----------------------/{f=!f;if (!f)print "Deleted up to this point"}' foo.txt
или,
/usr/xpg4/bin/awk '!f{print} /----------------------/{f=!f;if (!f)print "Deleted up to this point"}' foo.txt
или,
/usr/xpg6/bin/awk '!f{print} /----------------------/{f=!f;if (!f)print "Deleted up to this point"}' foo.txt
$ awk ' /^--------------------------------------------------- Cap in MB/{print "Deleted up to this point"; f=0; z=""; next;} /^---------------------------------------------------------------------- Cap in MB/{f=1; if(z)print substr(z,2); z=""; print;next;} f{z=z"\n"$0;next;} END{print substr(z,2);}' foo.txt
---------------------------------------------------------------------- Cap in MB
Deleted up to this point
---------------------------------------------------------------------- Cap in MB
Deleted up to this point
---------------------------------------------------------------------- Cap in MB
Deleted up to this point
---------------------------------------------------------------------- Cap in MB
line 2
line 3
line 4
line 5
---------------------------------------------------------------------- Cap in MB
line 2
line 3
line 4
line 5
Вот простое решение с awk: выключите печать после длинной пунктирной линии, включите Печать после короткой пунктирной линии.
awk '
!do_not_print {print}
$0 == "---------------------------------------------------------------------- Cap in MB" {do_not_print = 1}
$0 == "--------------------------------------------------- Cap in MB" {do_not_print = 0}
' <foo.txt >output.txt
Мой взять. Подобно John1024, но как его находится в одной строке, это нечитается.
Испытано на коробке Solaris 8.
/usr/xpg4/bin/awk \
-v section_start='^---------------------------------------------------------------------- Cap in MB' \
-v delete_marker='^--------------------------------------------------- Cap in MB' \
'
$0 ~ section_start {
for (i=1; i<=n; i++)
print line[i]
n=0
delete line
print
next
}
{line[++n] = $0}
$0 ~ delete_marker {
n=1
delete line
line[1] = "Deleted up to this point"
}
END {for (i=1; i<=n; i++) print line[i]}
' foo.txt