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

shell脚本使用

shell脚本使用记录

  • 1、Shell脚本:将文本行中的空格替换为换行并输出到新文件
    • 使用方法
    • 示例
    • 替代方案
  • 2、Shell脚本:删除文本文件中的空行
    • 使用方法
    • 示例
    • 替代方案
  • 3、Shell脚本:将每行12位16进制数据转换为二进制
    • 脚本功能说明
    • 使用示例
    • 替代单行命令
    • 注意事项

1、Shell脚本:将文本行中的空格替换为换行并输出到新文件

以下是一个简单的shell脚本,它可以读取输入文件中的每一行,将行内的空格替换为换行符,并将结果输出到一个新的文件中:

#!/bin/bash# 检查参数数量
if [ $# -ne 2 ]; thenecho "用法: $0 输入文件 输出文件"exit 1
fiinput_file=$1
output_file=$2# 检查输入文件是否存在
if [ ! -f "$input_file" ]; thenecho "错误: 输入文件 $input_file 不存在"exit 1
fi# 处理文件
while IFS= read -r line; do# 将空格替换为换行符并追加到输出文件echo "$line" | tr ' ' '\n' >> "$output_file"
done < "$input_file"echo "处理完成,结果已保存到 $output_file"

使用方法

  1. 将上述脚本保存为 split_lines.sh
  2. 赋予执行权限:chmod +x split_lines.sh
  3. 运行脚本:./split_lines.sh 输入文件.txt 输出文件.txt

示例

假设有一个输入文件 input.txt 内容如下:

hello world
this is a test

运行脚本后,输出文件 output.txt 内容将是:

hello
world
this
is
a
test

替代方案

如果你只需要一次性处理,也可以直接使用以下命令:

tr ' ' '\n' < 输入文件.txt > 输出文件.txt

这个单行命令与上面的脚本功能相同,但脚本提供了更好的错误处理和用户反馈。

2、Shell脚本:删除文本文件中的空行

以下是一个简单的shell脚本,它可以删除输入文件中的所有空行(包括只包含空白字符的行),并将结果输出到一个新的文件中:

#!/bin/bash# 检查参数数量
if [ $# -ne 2 ]; thenecho "用法: $0 输入文件 输出文件"exit 1
fiinput_file=$1
output_file=$2# 检查输入文件是否存在
if [ ! -f "$input_file" ]; thenecho "错误: 输入文件 $input_file 不存在"exit 1
fi# 删除空行和只含空白字符的行
grep -v '^[[:space:]]*$' "$input_file" > "$output_file"echo "处理完成,空行已删除,结果已保存到 $output_file"

使用方法

  1. 将上述脚本保存为 remove_empty_lines.sh
  2. 赋予执行权限:chmod +x remove_empty_lines.sh
  3. 运行脚本:./remove_empty_lines.sh 输入文件.txt 输出文件.txt

示例

假设有一个输入文件 input.txt 内容如下:

第一行第二行第三行第四行

运行脚本后,输出文件 output.txt 内容将是:

第一行
第二行
第三行
第四行

替代方案

如果你只需要一次性处理,也可以直接使用以下命令:

grep -v '^[[:space:]]*$' 输入文件.txt > 输出文件.txt

或者使用sed命令:

sed '/^[[:space:]]*$/d' 输入文件.txt > 输出文件.txt

或者使用awk命令:

awk 'NF' 输入文件.txt > 输出文件.txt

这些单行命令与上面的脚本功能相同,但脚本提供了更好的错误处理和用户反馈。

3、Shell脚本:将每行12位16进制数据转换为二进制

以下是一个专门处理12位16进制数据(6字节)转换为二进制表示的Shell脚本:

#!/bin/bash# 检查参数
if [ $# -ne 2 ]; thenecho "用法: $0 输入文件(12位16进制) 输出文件(二进制)"exit 1
fiinput_file=$1
output_file=$2# 检查输入文件
if [ ! -f "$input_file" ]; thenecho "错误: 输入文件 $input_file 不存在"exit 1
fi# 清空输出文件
> "$output_file"# 处理每一行12位16进制数据
while IFS= read -r hex_line; do# 移除所有空白字符hex_line=$(echo "$hex_line" | tr -d '[:space:]')# 验证长度是否为12if [ ${#hex_line} -ne 12 ]; thenecho "警告: 跳过非12位16进制行: $hex_line" >&2continuefi# 验证是否为有效16进制if [[ ! $hex_line =~ ^[0-9a-fA-F]{12}$ ]]; thenecho "警告: 跳过无效16进制行: $hex_line" >&2continuefi# 转换为二进制(每字节8位,共48位二进制),如果每行数据更多,可以修改循环最大值binary=$(echo "$hex_line" | xxd -r -p | xxd -b | awk '{for(i=2;i<=7;i++) printf $i}' | tr -d ' ')# 写入输出文件echo "$binary" >> "$output_file"
done < "$input_file"echo "转换完成,24位二进制结果已保存到 $output_file"

脚本功能说明

  1. 输入验证

    • 确保每行正好是12位16进制字符(6字节)
    • 自动跳过无效或长度不正确的行
  2. 转换逻辑

    • 使用xxd -r -p将16进制转换为二进制数据
    • 再用xxd -b将二进制数据转换为二进制表示形式
    • 通过awk和tr清理格式,得到连续的48位二进制串
  3. 输出格式

    • 每行对应输入文件的一行
    • 每行输出48位二进制(6字节 × 8位)

使用示例

输入文件 hex12_input.txt 内容:

A1B2C3D4E5F6
123456789ABC
FFEEDDCCBBAA

运行脚本:

./hex12_to_binary.sh hex12_input.txt binary_output.txt

输出文件 binary_output.txt 内容:

101000011011001011000011110101001110010111110110
000100100011010001010110011110001001101010111100
111111111110111011011100110010111011101010101010

替代单行命令

如果只需要简单转换,可以使用这个perl单行命令:

perl -ne 'chomp; s/\s+//g; print unpack("B24", pack("H12", $_)) . "\n" if length($_) == 12' input.txt > output.txt

注意事项

  1. 严格限制每行输入必须正好是12位16进制字符
  2. 输出固定为48位二进制(前面不会补零)
  3. 对于大文件处理,可能需要考虑性能优化
  4. 如果16进制字符串中有空格或换行符,脚本会自动去除
http://www.dtcms.com/a/322009.html

相关文章:

  • 软件销售跟进思路
  • 期货和期权对冲后能盈利吗?
  • 大力水手4——AI驱动的多帧生成与神经网络渲染
  • MySQL NULL 值处理详细说明
  • 《天天酷跑》:用Pygame打造经典跑酷游戏的开发与玩法全解析
  • 库函数NTC采样温度的方法(STC8)
  • react的form.resetFields()
  • cuda编程之内核执行配置参数
  • 智慧交通场景下 mAP↑28%:陌讯多模态融合算法实战解析
  • Linux入门到精通,第二周自我总结
  • 书生浦语第五期-L1G3-LMDeploy 课程
  • 配电线路故障定位在线监测装置的技术解析与应用价值
  • C语言编译流程讲解
  • 第七篇:动画基础:requestAnimationFrame循环
  • 解决多线程安全性问题的方法
  • 可编辑51页PPT | 某鞋服品牌集团数字化转型项目建议书
  • 相机Camera日志实例分析之十:相机Camx【萌拍调节AE/AF拍照】单帧流程日志详解
  • 基于MATLAB实现的毫米波大规模MIMO系统中继混合预编码设计
  • [windows]torchsig 1.1.0 gr-spectrumdetect模块安装
  • LeetCode 刷题【34. 在排序数组中查找元素的第一个和最后一个位置、35. 搜索插入位置】
  • 哈希法(Java)
  • 【数据结构】排序(sort) -- 计数排序
  • wstool和git submodule优劣势对比
  • select ... for update阻塞
  • 【感知机】感知机(perceptron)学习算法例题及详解
  • 任务管理器如何查看详细的命令行和路径?
  • 安科瑞能源管理系统在某新材料公司光储充一体化项目上的应用
  • 【C++空指针革命】nullptr:告别NULL的终极解决方案与底层实现剖析
  • 在超算中心,除了立式机柜(rack-mounted)还有哪些形式?
  • 官方Windows系统部署下载工具实践指南