[Hecho a sí mismo para uso personal - regístrelo] Use el comando de terminal para ver el mapa mental

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:
inserte la descripción de la imagen aquí

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,paraSustitució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

7. Grabar pantalla

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

Supongo que te gusta

Origin blog.csdn.net/tfnmdmx/article/details/129932101
Recomendado
Clasificación