Именованный канал является частью файловой системы. Что-либо, что имеет имя файла, является частью файловой системы. Если это, оказывается, файловая система в персистентном устройстве хранения данных (т.е. на диске), то это переживает системную перезагрузку.
Запись файловой системы для именованного канала просто имеет имя, обычные метаданные (время, полномочия, и т.д.), и флаг, который говорит, “это - именованный канал”. Данные, которые проходят канал, не переходят к файловой системе. Но сам именованный канал находится в файловой системе.
Диапазоны дат и регекс не так уж и хороши. Если я правильно интерпретирую $ в вашем grep, то дата - это последнее поле в строке.
Попробуйте это:
awk '$NF >= 1965 && $NF <= 1996' filename
Если вы должны использовать grep, он становится более запутанным:
grep -E '196[5-9]|19[78][0-9]|199[0-6]$' filename
Следует отметить, что egrep
позволяет учитывать 19
, как например:
grep -E '19(6[5-9]|[78][0-9]|9[0-6])$' filename
, что можно считать более ясным.
$ (for i in {1900..2000}; do echo $i; done) | egrep '(196[5..9]|19[78][0-9]|199[0-6])'
1965
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
. Использование стандартного синтаксиса grep
для извлечения строк, заканчивающихся любым номером подстроки в диапазоне от 1965 до 1996 включительно (это также аналогично попытке пользователя в вопросе):
grep -e '196[5-9]$' \
-e '197[0-9]$' \
-e '198[0-9]$' \
-e '199[0-6]$'
При этом извлекаются строки, которые заканчиваются любым интересующим вас числом. Обратите внимание, что выражения, как правило, должны быть заключены в кавычки.
Во избежание сопоставления, например.231974
(соответствует1974
)в конце строки, вы можете вставить \<
в начале каждого числа в шаблоне:
grep -e '\<196[5-9]$' \
-e '\<197[0-9]$' \
-e '\<198[0-9]$' \
-e '\<199[0-6]$'
Это заставляет число быть словом, а не подстрокой какого-либо другого более длинного слова.