Hecho en casa para uso personal - grábalo
1. Demostración
Hecho y de uso propio: use comandos en la terminal, encuentre palabras clave e imprima el esquema de las notas
dos, función
Funciones principales del script:
- De acuerdo con la palabra clave, generar todas las ramas
Función extendida:
- Establezca el número de líneas de salida según sea necesario
- resaltado de palabras clave de búsqueda
- coincidencia exacta/coincidencia aproximada
3. Proceso
Empecé a estudiar recientemente y escribí muchos mapas mentales mientras veía clases en línea, pero en el uso real, no es muy conveniente abrir los mapas mentales con frecuencia, por lo que quiero usar comandos como –ayuda para ver mi propia
mente mapas en la imagen del terminal
El primero es poder leer el mapa mental, y luego descubrió que la cortina puede convertir el mapa mental en un modo de nota de esquema:
Luego expórtelo como docx y luego conviértalo en formato txt en lotes (porque necesita instalar otras cosas para leer archivos en formato docx)
libreoffice --headless --convert-to txt /home/qwe/下载/*.docx --outdir /home/qwe/桌面/script/lib
Después de que se pueda leer, es encontrar una manera de generar la rama del nodo donde se encuentra la palabra clave
El método adoptado es: obtenga la cantidad de espacios al comienzo de cada línea, cuanto mayor sea la cantidad de espacios, significa que es un nodo secundario y se puede generar
#!/bin/bash
# 接收参数:参数1:待查询关键词 参数2:最大输出行数
key=${1:-' '}
maxlines=${2:-100}
if [[ $key == ' ' ]];then
echo "参数1:查询关键词(必填)"
echo "参数2:最大输出行数(默认为100):从查找到关键词的行,继续往下输出的行数(需满足是分支)"
exit
fi
# echo "查询关键词:${key}"
# echo "最大输出行数:${maxlines}" #从查找到关键词的行,继续往下输出的行数(需满足是分支)
# 若无下行代码,行内文本的缩进和空格将会丢失。
IFS=$'\n'
flag=0 # 为1,开始输出分支
start_count=0 # 起始行 空格个数
cur_count=0 # 空格个数
src=0 #未输出过文件名
dir="/home/qwe/桌面/script/lib/"
ls $dir | while read srcfile # 文件
do
let src=0
for line in `cat ${
dir}${
srcfile}` # 每行
do
if [ $flag -gt 0 ]
then # 若是分支,返回包含关键字的分支
# 判断此行空格是否大于start_count
let cur_count=0 # 空格个数
for i in `seq 1 ${
#line}` # 每个字符
do
a=`echo $line | cut -c $i`
case $a in
' ')
let cur_count+=1
;;
# ● )
*)
break
;;
esac
done
# echo "cur_count:${cur_count} --$line"
# 如果没有空格,就输出!待更新
if [ $cur_count -eq 0 ]
then
echo $line | perl -pe "s/${key}/\e[1;31m$&\e[0m/g"
elif [ $cur_count -gt $start_count ]
then
echo $line | perl -pe "s/${key}/\e[1;31m$&\e[0m/g"
let cur_count=0
let flag-=1
if [ $flag -eq 0 ];then
let start_count=0 # 起始行 空格个数
let cur_count=0 # 空格个数
echo "---------------------------------------------------------"
fi
else
let flag=0 # 为1,开始输出分支
let start_count=0 # 起始行 空格个数
let cur_count=0 # 空格个数
echo "---------------------------------------------------------"
# 本以为是分支,但其实不是,又没法进入elif判断,所以这里要添加判断
if [[ $line =~ $key ]] # 包含关键字
then # 返回包含关键字的分支
let flag=${maxlines}
echo $line | perl -pe "s/${key}/\e[1;31m$&\e[0m/g"
for i in `seq 1 ${
#line}`
do
a=`echo $line | cut -c $i`
case $a in
' ')
let start_count+=1
;;
*)
break
;;
esac
done
# echo "start_count:$start_count"
fi
fi
elif [[ $line =~ $key ]] # 包含关键字
then # 返回包含关键字的分支
# 可能不是要找的,比如cpp
let flag=${maxlines}
if [[ $src == 0 ]]
then
let src=1
echo " "
echo "======================= "$srcfile" ======================="
fi
echo $line | perl -pe "s/${key}/\e[1;31m$&\e[0m/g"
let start_count=0 # 起始行 空格个数
for i in `seq 1 ${
#line}`
do
a=`echo $line | cut -c $i`
case $a in
' ')
let start_count+=1
;;
*)
break
;;
esac
done
# echo "start_count:$start_count"
fi
done
done
Después de escribir el código, debe establecer un alias para él; de lo contrario, será demasiado problemático usarlo cada vez.
gedit ~/.zshrc
qwe /home/qwe/桌面/script/qwe.sh
source ~/.zshrc
Entonces puedes usar el comando
qwe #查看命令
qwe rm # 参数1:查询关键词(必填)
qwe rm 3 #参数2:最大输出行数(默认为100):从查找到关键词的行,继续往下输出的行数(需满足是分支)
4. Cosecha
1. Shell pasa parámetros, variables , paréntesis
${var-初始值} 如果没有定义,则表达式返回默认值
没有定义或者为空字符串,则表达式返回默认值
${var:-初始值} 临时调用,变量var并不改变,仍然为空
${var:=初始值} 调用初始值后,变量var也赋予了一个值
传=${1:-'1.0.0'}
参=${2:-'test demo'}
Tanto $( ) como ` ` (comilla grave) se pueden usar para la sustitución de comandos
Utilice ∗ ∗ sustitución de variables ∗ ∗ . En general, { } se usa para **sustitución de variables**. En general,para∗∗ Sustitución de variables∗∗ . En general, var no es diferente de ${var}
[ ] suma [] suma[ ] y (()) son lo mismo, ambosrealizan operaciones matemáticas.
(( )) y [[ ]] son versiones mejoradas de [ ] para expresiones de comparación matemática y expresiones de cadena , respectivamente.
2. caso en
3. si no
4. Destacar
echo \$line | perl -pe "s/\${key}/\e[1;31m$&\e[0m/g"
5. por mientras
6. SFI
8. Obtenga la cantidad de espacios en cada línea
let start_count=0 # 起始行 空格个数
for i in `seq 1 ${
#line}`
do
a=`echo $line | cut -c $i`
case $a in
' ')
let start_count+=1
;;
*)
break
;;
esac
done
# echo "start_count:$start_count"
9.doc a txt
libreoffice --headless --convert-to txt /home/qwe/下载/*.docx --outdir /home/qwe/桌面/script/lib
Cinco, el problema
Coincidencia de palabras clave , sin coincidencia exacta , coincidencia
aproximada