Принятие Ваших аппаратных средств допускает замену в горячем режиме жестких дисков, я абсолютно уверен, что любой современный дистрибутив Linux должен немедленно определить добавленный диск и создать номера устройств для доступа к нему, обычно через udev
.
Попробуйте это:
#!/bin/bash
#
# foo - do things
# Author: John Doe <jhon@doe>
# ----------------------------------------------
# SYNOPSIS
# foo [OPTIONS] FILE
#
# DESCRIPTION
# At vero eos et accusamus et iusto odio
# dignissimos ducimus qui blanditiis praesenti
# voluptatum deleniti atque corrupti quos.
# ----------------------------------------------
cat `which $0` | sed -n '0,/# -\+$/d;/# -\+$/,$d;p'
Можно также выполнить это с awk
:
awk '/^# --/{ flag=!flag; next}; flag' file
Учитывая, что текст, который Вы используете для разграничивания требуемого текста, является тем же вначале и концом, т.е., # --
, нормальный шаблон диапазона перестанет работать так, необходимо использовать флаг. Следующий оператор вынуждает awk переместиться в следующую запись, прежде, чем распечатать диапазон.
cat ...
строка.
– Pedro Lacerda
30.09.2012, 04:50
Вы могли сделать это симпатичный просто с awk
:
awk -v RS='\n# -+' 'NR==2' $0
RS
наборы к разделителю записей соответственно и NR==2
печатает вторую запись.
Можно удалить знак комментария и дополнительное пространство с gsub
, например:
awk -v RS='\n# -+' 'NR==2 { gsub("\n# ", "\n"); print }' $0
Обновление
Для предотвращения пустой первой строки добавляют \n
кому: RS
, но теперь первой строкой не заменяют gsub
, так gensub
требуется:
awk -v RS='\n# -+\n' 'NR==2 { print gensub("(^|\n)# ", "\\1", "g") }' $0
gsub(/\n?\n# /, "\n")
без успеха.
– Pedro Lacerda
30.09.2012, 15:11
Вместо того, чтобы прикреплять Ваше сообщение в комментарии в начале файла, можно также эмулировать __DATA__
раздел Perl и некоторых других языков программирования путем выхода перед сценарием достигает его:
#!/bin/sh
data=$(sed '0,/^__DATA__$/d' "$0")
printf '%s\n' "$data"
exit
__DATA__
FOO BAR BAZ
LLAMA DUCK COW
То же общее представление как другие находящиеся в sed решения, все же.
ls
, можно использовать в своих интересах xargs -0
---------121 человек--------75242----, это прохладно. Мне понравилась идея meta информации (вне комментариев) сохраненный на исходном коде. Я предпочитаю документацию относительно вершины, но уверенный я найду некоторое использование для этого.
– Pedro Lacerda
30.09.2012, 22:46
То, в чем Вы нуждаетесь, называют "здесь документ". К счастью, это уже реализовано в ударе. Проверьте следующий URL http://tldp.org/LDP/abs/html/here-docs.html
Вы просто используете следующее:
cat <<end-of-message
----------------------------
message lines...
----------------------------
end-of-message
Можно добавить условное выражение наверху сценария для печати этого, только если параметр вводится или что-то... как-h опция или при отсутствии существующих аргументов.
Это могло бы работать на Вас (GNU sed):
sed '/^# -\+$/,//!d;//d' $0
Объяснение:
/^# -\+$/,//!d
удалите все не между разделителями//d
удалите разделители и позвольте остатку пройтиN.B. //
снова использует последний regexp.