我想从文件中挑选出匹配的行
# Mode: org
#
可以是文件编程语言的任何注释字符。
除了 之外#
,in 也可以是;
或中的任何一个!
,使用 bash 脚本可以带有任何前面的空格数。
例子
# 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