当前位置: 首页 > news >正文

编辑器及脚本案例

文章目录

    • sed编辑器
      • 1.sed编辑器概念
      • 2.sed编辑器工作流程
        • 处理大文件较卡问题
      • 3.sed编辑器用法
        • 命令格式
        • 常用选项
        • 常用操作
    • awk编辑器
      • 1.概念
      • 2.工作原理
      • 3.用法
        • 命令格式
        • 常用选项
        • 常见的内建变量
      • 脚本案例
        • 1.自动备份文件或目录:
        • 2.批量重命名文件:
        • 3.批量删除文件
        • 4.查找并删除指定名称的文件:
        • 5.查找并替换文件内容:
        • 6.批量创建文件:
        • 7.创建文件夹并移动文件:
        • 8.在文件夹中查找文件:
        • 9.计算文件夹中文件数量:
        • 10.计算文件夹大小:
        • 11.定时执行命令:
        • 12.发送邮件:
        • 13.批量解压缩文件:
        • 14.在文件夹中查找并删除文件:
        • 15.批量重命名文件:
        • 16.对文件夹中的文件按修改时间排序:
        • 17.批量转换文件格式:
        • 18.删除文件夹中的空文件夹:
        • 19.删除文件夹中的空文件:
        • 20.批量更改文件权限:

sed编辑器

1.sed编辑器概念

sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。

sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储一个命令文本文件中。

2.sed编辑器工作流程

sed 的工作流程主要包括读取执行显示三个过程:

读取:sed从输入流(文件、管道、标准输入〉中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。
   执行:默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则临时sed命令将会在所有的行上依次执行。

显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。

在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

注意:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。

处理大文件较卡问题

流编辑器处理大文件比较卡可以使用两种方式来处理。sed命令将大文件分成若干个小文件读取。或者使用**cat命令读取全部文件放在临时缓冲区中,然后交给流编辑器(grep、sed、awk)进行处理**,由于使用cat命令时IO消耗比较低。

3.sed编辑器用法

命令格式
sed -e '操作' 文件l 文件2 ...
sed -n -e '操作' 文件1 文件2 ...
sed -f 脚本文件 文件1 文件2 ...
sed -i -e '操作' 文件1 文件2 ...sed -e 'n{				#n意为:指定行
操作l
操作2
...
}' 文件1 文件2 ...
常用选项
选项含义
-e--expression=表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用。
-f--file=表示用指定的脚本文件来处理输入的文本文件。
-h--help显示帮助。
-n--quietsilent禁止sed编辑器输出,但可以与p命令一起使用完成输出。
-i直接修改目标文本文件。
-r, --regexp-extended支持正则表达式
常用操作
操作含义
s替换,替换指定字符。
d删除,删除选定的行。
a增加,在当前行下面增加一行指定内容。
i插入,在选定行上面插入一行指定内容。
c替换,将选定行替换为指定内容。
y字符转换,转换前后的字符长度必须相同。
p打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容,如果有非打印字符,则以ASCII码输出。其通常与-n选项一起使用。
=打印行号。
l(小写L)打印数据流中的文本和不可打印的AscII字符(比如结束符$、制表符\t)

awk编辑器

1.概念

sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个"字段"然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。

在使用awk命令的过程中,可以使用逻辑操作符 &&表示与、||表示或、!表示非;还可以进行简单的数学运算,如+-*/%^分别表示加、减、乘、除、取余和乘方。

2.工作原理

逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。

3.用法

命令格式
awk 选项 '模式或条件 {操作}' 文件1 文件2 ...
awk -f 脚本文件 文件l 文件2 ...
常用选项
-F  指定分隔符
awk -F ',' '{print}' file1
常见的内建变量
内建变量含义
FS列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与-F作用相同。
NF当前处理的行的字段个数。$NF代表最后一个字段。
NR当前处理的行的行号(序数)。
$0当前处理的行的整行内容。
$n当前处理行的第n个字段(第n列)。
FILENAME被处理的文件名。
RS行分隔符。awk从文件上读取资料时,将根据Rs的定义把资料切割成许多条记录,而awk比较倾向于将一行分成多个一次仅读入一条记录,以进行处理。预设值是\n

脚本案例

1.自动备份文件或目录:
#!/bin/bash
#设置备份目录
bachup_dir="/path/to/backup/dir"
#设置要备份的文件或目录
files_to_backup="/path/to/files  /path/to/dir"
#创建一个日期时间戳
timestamp=$(date +%F_%T)
#备份文件
tar -crzf "${bachup_dir}/backup_${timestamp}.tar.gz" ${files_to_backup}
2.批量重命名文件:
#!/bin/bash
# 设置文件扩展名
file=$(find . -type f -name "*.txt"
read -p"请输入修改后的文件名:" NAME
if [ $NAME =~ $file]; then
mv $file $NAME
fi0
bash $0
3.批量删除文件
#!/bin/bash
find ./ -type f -exec rm -rf{} \;
4.查找并删除指定名称的文件:
#!/bin/bash
read -p "请输入需要删除的文件名:" NAME
find $NAME
if [ $? -eq 0 ];then
rm -rf $NAME
fi
5.查找并替换文件内容:
#!/bin/bash# 设置要查找的字符串
search_string="old_string"# 设置要替换成的字符串
replace_string="new_string"# 查找并替换文件内容
find . -type f -exec sed -i "s/${search_string}/${replace_string}/g" {} \;
6.批量创建文件:
#!/bin/bash# 设置文件名前缀
prefix="file"# 设置文件数量
num_files=10# 循环创建文件
for i in $(seq 1 ${num_files})
dotouch "${prefix}${i}.txt"
done
7.创建文件夹并移动文件:
#!/bin/bash
# 设置文件夹名称
dir_name="new_dir"# 设置要移动的文件
files_to_move="file1.txt file2.txt"
# 创建文件夹并移动文件
mkdir ${dir_name} && mv ${files_to_move} ${dir_name}
8.在文件夹中查找文件:
#!/bin/bash# 设置文件夹路径
dir_path="/path/to/dir"# 设置文件名
filename="example.txt"# 在文件夹中查找文件
find ${dir_path} -name "${filename}"
9.计算文件夹中文件数量:
#!/bin/bash
# 设置文件夹路径
dir_path="/path/to/dir"# 计算文件数量
num_files=$(find ${dir_path} -type f | wc -l)echo "Number of files in ${dir_path}: ${num_files}"
10.计算文件夹大小:
#!/bin/bash
read -p "请输入需要.计算文件夹大小:" file
#计算文件夹大小
du -sh $file
11.定时执行命令:
#!/bin/bash# 设置命令
command="echo hello"# 设置执行周期(以秒为单位)
period=10# 定时执行命令
while true
doeval ${command}sleep ${period}
done
12.发送邮件:
#!/bin/bash
mail -s
13.批量解压缩文件:
 #!/bin/bashcase "$file" in*.zip)unzip -q "$file" -d "$base_name";;*.tar|*.tar.gz|*.tgz|*.tar.bz2|*.tbz2)tar xf "$file" -C "$base_name";;*.gz)base_file=$(basename "$file")new_file="${base_file%.gz}"   # 去掉最后一个扩展名(.gz)mkdir -p "$base_name"gzip -d -c "$file" > "$base_name/$new_file";;esac
14.在文件夹中查找并删除文件:
#!/bin/bash# 设置文件夹路径
dir_path="/path/to/dir"# 设置文件名
filename="example.txt"# 在文件夹中查找文件
find ${dir_path} -name "${filename}"# 删除文件
rm -rf "${filename}"
15.批量重命名文件:
#!/bin/bash# 设置文件扩展名
extension=".old"# 设置新文件扩展名
new_extension=".new"# 遍历当前目录下的所有文件
for file in *${extension}
do# 获取文件名(不包含扩展名)filename=$(basename "${file}" "${extension}")# 重命名文件mv "${file}" "${filename}${new_extension}"
done
16.对文件夹中的文件按修改时间排序:
ls -t
17.批量转换文件格式:
#!/bin/bash# 设置文件扩展名
extension=".txt"# 设置新文件扩展名
new_extension=".md"# 遍历当前目录下的所有文件
for file in *${extension}
do# 转换文件格
pandoc -s "${file}" -o "${file/${extension}/${new_extension}}"
done注意:需要先安装Pandoc。
18.删除文件夹中的空文件夹:
#!/bin/bash# 设置文件夹路径
dir_path="/path/to/dir"# 删除文件夹中的空文件夹
find ${dir_path} -type d -empty -delete
19.删除文件夹中的空文件:
#!/bin/bash# 设置文件夹路径
dir_path="/path/to/dir"# 删除文件夹中的空文件
find ${dir_path} -type f -empty -delete
20.批量更改文件权限:
#!/bin/bash# 设置文件夹路径
dir_path="/path/to/dir"
read -p "输入要更改文件的权限:"permission
if  [[ "$permission" =~ ^[0-7]{3}$ ]];then
# 批量更改文件权限
find ${dir_path} -type f -exec chmod ${permission} {} \;
elseecho "错误:无效的权限值 '$permission',必须是3位八进制数字(0-7)"fi
http://www.lryc.cn/news/572544.html

相关文章:

  • 【Redis】主从复制
  • Transformer结构介绍
  • 【K8S】详解Labels​​ 和 ​​Annotations
  • 记录存储的使用
  • 计量经济学(复习/自用/未完)
  • AIGC - Prompt Optimizer 提示词优化器
  • uni-app项目实战笔记16--实现头部导航栏效果
  • 【数字人开发】Unity+百度智能云平台实现短语音文本识别功能
  • OpenAI 公布《走向理解与预防失准泛化:由“角色特征”驱动的突现性失准》研究总结
  • 用“Gemini 2.0 Flash Preview Image Generation”模型修改图片,有哪些常用的提示词和方法
  • Spring MVC参数绑定终极手册:单多参对象集合JSON文件上传精讲
  • MCAL学习(6)——诊断、DCM
  • 股票心理学习篇:交易的人性弱点 - 频繁交易
  • 基于Python的机动车辆推荐及预测分析系统
  • 计算机网络零基础完全指南
  • ROS2 笔记汇总(3) 动作
  • Linux树莓派项目实战:外网访问、PWM呼吸灯、超声波测距与驱动开发
  • 《思维力:高效的系统思维》
  • 【开源模型】高考数学139分!小米MiMo开源模型:7B参数突出重围
  • MySQL 的 WITH ROLLUP 功能
  • MySQL: Invalid use of group function
  • swing综合案例.
  • Github 热点项目 [特殊字符]PHP性能革命!FrankenPHP让Laravel/Symfony飞起来!
  • (哈希)128. 最长连续序列
  • 5G核心网周期性注册更新机制:信令流程与字段解析
  • Python 数据分析与可视化 Day 1 - Pandas 数据分析基础入门
  • 算法导论第十九章 并行算法:解锁计算新维度
  • 防火墙的禁用及开启
  • Stable Diffusion 实战-手机壁纸制作 第二篇:优化那些“崩脸”和“马赛克”问题,让图像更加完美!
  • ROS学习之动作通信