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

Perl区分文件换行符类型

背景

在Windows上使用Perl判断文件时何种换行符时,处理CR LF类型的换行符时,也识别成了LF。

思路

  1. Windows上的换行是 CRLF , Unix上是 LF , Mac CR
  2. 在Windows平台使用Perl读取文件创建文件句柄时,未对file handler设置binmode,了解到binmode模型作用是采用非二进制读取模式时,双字节换行符CR LF在读取时转换为LF,写入时将LF转换为CR LF。这对于使用双字节分隔文本文件行的操作系统(MS-DOS)至关重要,但对使用单个字符的操作系统(Unix,Mac OS,QNX)没有影响。
  3. chomp是去除每行行末的记录分隔符(record separator),这个分隔符的值是可以通过 perl内置变量 $/ (input record separators )来设置,默认情况下Windows和Linux上 $/ 的值都是 LF

处理

所以Perl脚本在读取DOS文本时,行末换行符CR LF 被自动转行成 LF ,此后去判断单行记录时,返回结果均是LF,未能正确识别出文件的换行符类型,基于此原因。修改代码如下(测试)

#!/usr/bin/perluse strict;my $path = '/export/script/perl_scripts';my @files = qw /a.txt b.txt/;my $newLine = '';for my $f (@files)
{my $fullPath = sprintf "%s/%s",$path,$f;# 获取首行open(INFILE,$fullPath) or die "dont open this file ${fullPath}";# 此函数设置在操作系统上以二进制形式读取和写入FILEHANDLE的格式。# 采用非二进制读取模式时,双字节换行符CR LF在读取时转换为LF,写入时将LF转换为CR LF。# 这对于使用双字节分隔文本文件行的操作系统(MS-DOS)至关重要,但对使用单个字符的操作系统(Unix,Mac OS,QNX)没有影响。binmode(INFILE); # 设置二进制读取模式,保留文件中的原始换行符my $line = <INFILE>;close INFILE;if($line =~ '\r\n'){$newLine = 'CRLF';print "windows newline\n";}elsif($line =~ '\n'){$newLine = 'LF';print "linux newline\n";}elsif($line =~ '\r'){$newLine = 'CR';print "mac newline\n";}else{print "is a single line without newline\n";}print "${fullPath} newline is ${newLine}\n";# 采用如下去除换行符方式,替换chomp方法,可在任意平台处理任意换行符类型的文件$line =~ s/[\r\n]+\Z//g;}
## 运行结果如下
# linux newline
# /export/script/perl_scripts/a.txt newline is LF
# windows newline
# /export/script/perl_scripts/b.txt newline is CRLF

思路源自:https://blog.csdn.net/fibonaccian/article/details/42168725

相关文章:

Perl区分文件换行符类型

背景 在Windows上使用Perl判断文件时何种换行符时&#xff0c;处理CR LF类型的换行符时&#xff0c;也识别成了LF。 思路 Windows上的换行是 CRLF , Unix上是 LF , Mac CR在Windows平台使用Perl读取文件创建文件句柄时&#xff0c;未对file handler设置binmode&#xff0c;了…...

数据备份文件生成--根据表名生成对应的sql语句文件

最近客户有个需求&#xff0c;希望在后台增加手动备份功能&#xff0c;将数据导出下载保存。 当然&#xff0c;此方法不适用于海量数据的备份&#xff0c;这只适用于少量数据的sql备份。 这是我生成的sql文件&#xff0c;以及sql文件里的insert语句&#xff0c;已亲测&#x…...

进程同步与互斥

目录 进程同步与互斥&#xff08;1&#xff09; 第一节、进程间相互作用 一、相关进程和无关进程 二、与时间有关的错误 第二节、进程同步与互斥 一、进程的同步 二、进程的互斥 三、临界区 进程同步与互斥&#xff08;2&#xff09; 三、信号量与P、V操作的物理含义…...

mysql workbench常用操作

1、No database selected Select the default DB to be used by double-clicking its name in the SCHEMAS list in the sidebar 方法一&#xff1a;双击你要使用的库 方法二&#xff1a;USE 数据库名 2、复制表名&#xff0c;字段名 3、保存链接...

【操作】国标GB28181视频监控EasyGBS平台更新设备信息时间间隔

国标GB28181协议视频平台EasyGBS是基于GB28181协议的视频监控云服务平台&#xff0c;可支持多路设备同时接入&#xff0c;并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。平台可提供视频监控直播、云端录像、云存储、检索回放、智能告警、语音对讲、平台…...

TensorFlow入门(八、TensorBoard可视化工具的应用)

TensorBoard常用函数和类http://t.csdn.cn/Hqi9c TensorBoard可视化的过程: ①确定一个整体的图表,明确从这个图表中获取哪些数据的信息 ②确定在程序的哪些节点、以什么样的方式进行汇总数据的运算,以记录信息,比如在反向传播定义以后,使用tf.summary.scalar记录损失值的变…...

升级targetSdkVersion至33(以及迁移至Androidx)

1.设置 android.useAndroidXtrue 和 android.enableJetifiertrue 2.一键迁移至androidx&#xff1a;Refactor -> Migrate to Androidx 3.手动修改未能自动迁移到androidx的部分&#xff1a; android.support.v4.view.ViewPager.PageTransformer -> androidx.viewpager.wi…...

python3.11版本pip install ddddocr调用时报错got an unexpected keyword argument ‘det‘ 解决

一、如图出现如下问题 ddddocr.__init__() got an unexpected keyword argument det出现问题原因&#xff1a;python3.11默认安装版本就旧版的ddddocr1.0的&#xff0c;所以导致如下报错 二、解决方案一&#xff08;推荐&#xff09; python3.11的环境直接安装这个即可&…...

代理IP与Socks5代理:跨界电商之安全防护与智能数据引擎

第一部分&#xff1a;跨界电商的兴起与网络安全挑战 1.1 跨界电商的崭露头角 跨界电商已经成为全球贸易的新引擎&#xff0c;企业纷纷踏上了拓展国际市场的征程。 1.2 网络安全的不容忽视 跨界电商的增长也伴随着网络安全威胁的增加。黑客攻击、数据泄露和欺诈行为等风险呈…...

如何评估一个HR是否专业?看这些标准

HR在遇到优秀的人才时&#xff0c;以往的招聘中&#xff0c;我们总以惯性思维寻找吸引人才的突破口&#xff0c;诸如体现薪酬优厚、突出平台优势甚至提高面试话术等&#xff0c;却忽略了面试官本人的人格魅力&#xff0c;本身就是公司招聘的形象代言&#xff0c;因为优秀的面试…...

WordPress主题开发( 八)之—— 模板循环详细用法

WordPress 主题开发教程手册 — 模板循环 WordPress 主题开发中&#xff0c;模板循环是一个非常关键的概念&#xff0c;它负责默认机制来输出文章内容。模板循环会遍历当前页面获取的所有文章&#xff0c;然后使用主题中的模板标签将它们格式化并输出。 模板循环的应用 Word…...

QT : 完成绘制时钟

1.头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QTimer> #include <QTime> #include <QPaintEvent> #include <QDebug> #include <QBrush>QT_BEGIN_NAMESPACE namespace Ui { class…...

香港云服务器和日本云服务器哪个好?(详细对比)

​  购置海外服务器时&#xff0c;您是在乎网络速度?价格?稳定性?当这几个因素同时存在&#xff0c;我们该如何选择?本篇针对海外热门的两个地区&#xff0c;中国香港和日本&#xff0c;这两种云服务器谁优谁劣?各有什么亮点?逐一进行对比分析。 一、速度上来看 中国香…...

Cross Attention和 Self- Attention 的区别?

Cross Attention和Self-Attention都是深度学习中常用的注意力机制&#xff0c;用于处理序列数据&#xff0c;其中Self-Attention用于计算输入序列中每个元素之间的关系&#xff0c;Cross Attention则是计算两个不同序列中的元素之间的关系。它们的主要区别在于计算注意力分数时…...

《从零开始的Java世界》02面向对象(基础)

《从零开始的Java世界》系列主要讲解Javase部分&#xff0c;从最简单的程序设计到面向对象编程&#xff0c;再到异常处理、常用API的使用&#xff0c;最后到注解、反射&#xff0c;涵盖Java基础所需的所有知识点。学习者应该从学会如何使用&#xff0c;到知道其实现原理全方位式…...

pve关闭windows虚拟机慢

背景&#xff1a; 在web界面关闭windows虚拟机一直转圈&#xff0c;使用命令行关闭报错 qm stop 155 trying to acquire lock... cant lock file /var/lock/qemu-server/lock-155.conf - got timeout解决 删除lock&#xff0c;然后用命令行重新关闭 rm /var/lock/qemu-serve…...

【Django】 rest_framework接口开发流程及接口功能组成

rest_framework接口开发流程及接口功能组成 使用restframework框架开发接口&#xff0c;方式应该有6、7种&#xff0c;每个人的习惯不同&#xff0c;用的方法也不一样&#xff0c;再次不再一一详述。 我比较常用&#xff1a;ModelSerializerGenericAPIView 原因是用视图函数装饰…...

Kafka Log存储解析以及索引机制

1.概述 在Kafka架构&#xff0c;不管是生产者Producer还是消费者Consumer面向的都是Topic。Topic是逻辑上的概念&#xff0c;而Partition是物理上的概念。每个Partition逻辑上对应一个log文件&#xff0c;该log文件存储是Producer生产的数据。Producer生产的数据被不断追加到该…...

广告电商模式:探索新商业模式,实现三方共赢

随着互联网技术的发展&#xff0c;电商行业正在不断探索新的商业模式。其中&#xff0c;广告电商模式是一种创新的方式&#xff0c;它成功地将广告和电商相结合&#xff0c;实现了三方共赢的局面。一、广告电商模式的定义广告电商模式&#xff0c;顾名思义&#xff0c;是一种将…...

动态线程池框架DynamicTp v1.1.4大版本发布,新增若干实用特性

DynamicTp 简介 DynamicTp 是一个基于配置中心实现的轻量级动态线程池监控管理工具&#xff0c;主要功能可以总结为动态调参、通知报警、运行监控、三方包线程池管理等几大类。 DynamicTp 特性 代码零侵入&#xff1a;我们改变了线程池以往的使用姿势&#xff0c;所有配置均放…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...