^# fish,
포함된 줄부터 다음 포함된 줄까지(포함하지 않고) 파일의 모든 줄을 인쇄하는 좋은 방법은 무엇입니까 ^#
?
답변1
AWK 사용:
awk '/^#/ { inblock = 0 }; /^# fish/ { inblock = 1 }; inblock'
그러면 실제로 로 시작하는 모든 블록이 인쇄됩니다 # fish
. 첫 번째 블록 이후에 중지하려면:
awk 'inblock && /^#/ { exit }; /^# fish/ { inblock = 1 }; inblock'
inblock
두 변형 모두 관심 있는 블록의 라인을 처리할 때 변수를 1로 설정하여 작동합니다. 1이면 마지막 inblock
명령문이 기본 작업(현재 라인 인쇄)을 적용합니다.inblock
답변2
진주
정규식 반복은 line boundary
# fish
개행 문자에 인접한 가장 짧은(탐욕스럽지 않은) 블록이나 파일 자체의 맨 끝에서 시작하고 끝나는 블록을 찾습니다. #
그런 다음 일치하는 부분을 인쇄합니다.
perl -l -0777ne 'print $& while /^#\sfish.+?(?=\n(?:#|\z))/msg' yourfile
sed -e '
/^# fish/!d; # havent yet seen the fish, so skip
$b; N; # seen the fish so grab the next line unless its the last in which case promptly show and quit
/\n#/!s/^/\n/; # not seen a line with "#" so go read next
/^\n/D; #
h; # whole block /# fish/.../#/ with us now
s/\(.*\)\n.*/\1/; # remove the last line, i.e., trailing # line
p; # show the block now
g; # retrieve orig unmodified block
s/.*\n/\n/; D; # keep the last line and go back for more...
' yourfile