일치하는 패턴에서 주석 문자 캡처

일치하는 패턴에서 주석 문자 캡처

파일에서 일치하는 줄을 선택하고 싶습니다.

# Mode: org

#파일 프로그래밍 언어의 주석 문자가 될 수 있습니다.

또한 , in은 bash 스크립트를 사용하여 앞에 공백을 추가하여 or 중 하나 #일 수도 있습니다 .;!

# Mode: org

   ;; Mode: org

!! Mode: org

파일 확장자에서 언어를 찾을 수 있습니다

.el    emacs
.c     c
.cc    c++
.sh    bash
.rc    bash
.f     fortran
.F     fortran
.f90   fortran
.texi  texinfo
.tex   tex

이것은 내가 현재 사용하는 bash 기능입니다.

capture ()
{
 local efile="$1"

 local begorg endorg charcl

 impl="1"
 if [ "$impl" = "1" ]; then 
   charcl='^[[:space:]]*(#|;|!)+[[:space:]]*' 
 elif [ "$impl" = "2" ]; then
   charcl='^[[:space:]]*(//|@c)[[:space:]]*' 
 fi 
 
 begorg="${charcl}"'Mode: org$'
 endorg="${charcl}"'# End of org$'
 
 awk -v ccls="$charcl" -v bego="$begorg" -v endo="$endorg" \
   '$0 ~ bego { found=1; next } 
    $0 ~ endo { found=0; } 
    found { sub(/ccls/,""); print }' "$efile"
}

이게 더 좋겠지 awk만 패턴을 포함하는 방법에 문제가 있습니다.

/<pattern>/ { set variable to A }
/other pattern/ { set variable to B }
... use variable in sub

관련 정보