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

【工欲善其事】巧用 PowerShell 自动清除复制 PDF 文本时夹杂的换行符号

文章目录

  • 巧用 PowerShell 自动清除复制 PDF 文本时夹杂的换行符号
    • 1 问题描述
    • 2 解决方案
    • 3 具体步骤
    • 4 效果测试
    • 5 小结与复盘

巧用 PowerShell 自动清除复制 PDF 文本时夹杂的换行符号

1 问题描述

不知各位是否也为复制过来的文本中夹杂的回车换行符抓狂过?就是在复制 PDF 格式的一段跨行文本时,比如我今天要尝试翻译的 D3.js 中的一段话:
图 1 一段待复制的跨行 PDF 格式的纯文本

【图 1 一段待复制的跨行 PDF 格式的纯文本】

粘贴到 Sublime Text 后就成了“断开”的 N 行:
图 2 粘贴复制的 PDF 文本,得到每一行都单独断开的多条文本

【图 2 粘贴复制的 PDF 文本,得到每一行都单独断开的多条文本】

如果这一段我要用百度翻译来参考一下,得到的内容可能也会是断开的:
图 3 人为割裂开的多行文本可能影响到最终翻译结果

【图 3 人为割裂开的多行文本可能影响到最终翻译结果】

为此,我不得不在机器翻译前把这些换行符号手动清理掉:
图 4 手动清除换行符后的翻译结果

【图 4 手动清除换行符后的翻译结果】

其实 Sublime Text 也能对这类操作进行批量处理:

  • 先一次性选中多行;
  • End 到各行末尾;
  • 删除换行符。

但如果内容多了,这样的批量操作也不见得有多高效。

2 解决方案

于是,我希望有个自定义命令,最好是 PowerShell 脚本那种,一运行就自动把我复制的文本转成不带任何换行符的一整段内容。

3 具体步骤

初稿还是让 AI 帮我弄吧:

代码清单 1 通过 AI 帮我拟定的 PowerShell 脚本初稿

# 文件名:test.ps1
# 获取剪贴板内容
$clipboardContent = Get-Clipboard# 清理文本:替换多个换行符和空格
$cleanedContent = $clipboardContent -replace '\n+', ' ' -replace '\s+', ' ' | ForEach-Object { $_.Trim() }# 将清理后的内容写回剪贴板
Set-Clipboard -Value $cleanedContent# 输出结果
Write-Host "剪贴板内容已清理并替换!"

然而执行后却发现,粘贴出来的文本还是逐行断开的,虽然命令行里单独输出是连在一起的。于是又让它改进一下,结果 AI 就变智障了,改了好几次都没成功。只能自己排查了,结果发现是 ForEach-Object 的锅,需要手动合并一下:

# 获取剪贴板内容
$clipboardContent = Get-Clipboard;# 清理文本:替换多个换行符和空格
$result = $clipboardContent -replace '\r+', ' ' -replace '\s+', ' ' | ForEach-Object { $_.Trim() };# 统一合并为一行
$result = $result -join ' '# 将清理后的内容写回剪贴板
Set-Clipboard $result# 测试:输出结果
# Write-Host $result;# 清空临时变量
$result = '';

4 效果测试

再运行一次:

图 5 在 PowerShell 命令行实测脚本

【图 5 在 PowerShell 命令行实测脚本】

再按 Ctrl + V 粘贴到其他地方:

图 6 粘贴到 Sublime Text 验证处理结果(已变为一行)

【图 6 粘贴到 Sublime Text 验证处理结果(已变为一行)】

中间没有一处换行,大功告成!

5 小结与复盘

后面的工作都算是锦上添花吧:配置到 PATH 里面,方便在任何地方调用。

如果想把处理结果放到其他地方(比如 node 环境下的某个变量等等),则可以用同样的思路,让 AI 先出一版,这样会更有效率。我最初就想让它用原生 JavaScript 帮我实现一版,然后放到 node 里把结果输出到控制台,但后来觉得用不顺手,才改成直接放剪切板,这样就方便多了。总之使用场景千变万化,但万变不离其宗:你出点子,AI 出初稿。

另外,如果 AI 生成的代码不给力,建议最多重试三次。因为问得太多,既说明它在理解上有问题,也不排除你自己没把问题描述清楚。这种情况下,还是自己动手最靠谱(真·人工智能)。

这是人工智能时代程序员应该具备的最基本的核心竞争力——用自身扎实的基本功,打通 AI 到目标之间的最后一公里。

相关文章:

【工欲善其事】巧用 PowerShell 自动清除复制 PDF 文本时夹杂的换行符号

文章目录 巧用 PowerShell 自动清除复制 PDF 文本时夹杂的换行符号1 问题描述2 解决方案3 具体步骤4 效果测试5 小结与复盘 巧用 PowerShell 自动清除复制 PDF 文本时夹杂的换行符号 1 问题描述 不知各位是否也为复制过来的文本中夹杂的回车换行符抓狂过?就是在复…...

Maven与Gradle的区别

Maven与Gradle是两种流行的构建工具,广泛用于Java项目的管理和构建。以下是它们的对比,包括官网、Windows 11配置环境、在IDEA中的相同点和不同点,以及它们各自的优缺点。 官网 Maven官网: https://maven.apache.orgGradle官网: https://gr…...

【linux 多进程并发】0202 Linux进程fork之后父子进程间的文件操作有着相同的偏移记录,多进程操作文件的方法

0202 Linux进程资源 ​专栏内容: postgresql使用入门基础手写数据库toadb并发编程 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 文章目录 020…...

SQLite在安卓中的应用

在 Android 应用程序中,SQLite 是默认的嵌入式数据库解决方案,Android 系统为开发者提供了相应的 API 来管理 SQLite 数据库。通过使用 SQLiteOpenHelper 类和 SQLiteDatabase 类,开发者可以方便地创建、查询、更新和删除数据库中的数据。 以…...

Python数据库操作

前面的章节中学习了使用 Python 读写文件的方法,大家可以用文件方式来存放数据,不过使用文件方式时不容易管理,同时还容易丢失,会带来许多问题。目前主流的方法都是采用数据库软件,通过数据库软件来组织和存放数据&…...

交叉熵损失函数为代表的两层神经网络的反向传播量化求导计算公式

反向传播(back propagation,BP)算法也称误差逆传播,是神经网络训练的核心算法。我们通常说的 BP 神经网络是指应用反向传播算法进行训练的神经网络模型。反向传播算法的工作机制究竟是怎样的呢?我们以一个两层&#xf…...

数据结构——八大排序(上)

数据结构中的八大排序算法是计算机科学领域经典的排序方法,它们各自具有不同的特点和适用场景。以下是这八大排序算法的详细介绍: 一、插入排序(Insertion Sort) 核心思想:将数组中的所有元素依次跟前面已经排好的元…...

vxe-table 导入导出功能全解析

一、vxe-table 导入导出功能概述 vxe-table 的导入导出功能在数据处理中具有至关重要的作用。在现代数据管理和处理的场景中,高效地导入和导出数据是提高工作效率的关键。 对于导入功能而言,它允许用户将外部的表格数据,如 Excel 文件&…...

常用STL的操作以及特点

C 标准模板库(STL)提供了很多常用的数据结构和算法,极大简化了开发工作。STL 包括容器(如 vector、list、map 等)、算法(如排序、查找等)以及迭代器。以下是一些常用 STL 容器的操作以及它们的特…...

025 elasticsearch索引管理-Java原生客户端

文章目录 pom.xml1创建索引2.创建索引并设置settings信息3.创建索引并设置mapping信息4.删除索引库5.给未设置mapping的索引设置mapping elasticsearch版本7.10.2,要求java客户端与之相匹配,推荐Springboot版本是2.3以上版本 依赖配置使用的是JUnit 5&am…...

Gin框架操作指南10:服务器与高级功能

官方文档地址(中文):https://gin-gonic.com/zh-cn/docs/ 注:本教程采用工作区机制,所以一个项目下载了Gin框架,其余项目就无需重复下载,想了解的读者可阅读第一节:Gin操作指南&#…...

AIGC技术的学习 系列一

文章目录 前言一、AIGC技术演进1.1 图像视频生成1.2. 文本生成1.3. 多模态生成1.4. 小结二、CAD&CAE软件介绍2.1. CAD软件2.2. CAE软件2.3. 小结三、AIGC技术与CAD&CAE软件的集成案例3.1. 土建设计领域3.2. 机械设计领域四、结语五、参考文献总结前言 在全球智能制造的…...

Milvus×Dify半小时轻松构建RAG系统

最近,检索增强生成(RAG)技术在AI界引起了广泛关注。作为一种将知识库与生成模型结合的新型架构,RAG大大提升了AI应用的实际表现。而在构建RAG系统时,Milvus作为业界领先的开源向量数据库,扮演着关键角色。本…...

wireshark 解密浏览器https数据包

一、导出浏览器证书有两种方法 1、在浏览器快捷方式追加启动参数: --ssl-key-log-file"d:\log\2.log" C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe --ssl-key-log-file"d:\log\2.log" 2、环境变量中新建用…...

【HTML】构建网页的基石

我的主页:2的n次方_ HTML 是一种超文本标记语言,不仅有文本,还能包含图片,音频等 1. HTML 的文件基本结构 html 标签是整个 html 文件的最顶层标签,head 标签中写页面的属性,body 标签是页面中显示的…...

rust不允许在全局区定义普通变量!

文章目录 C 中的全局变量Rust 中的全局变量设计哲学的体现 在 C 和 Rust 中,全局变量的处理方式体现了这两种语言设计哲学上的一些根本性差异: C 中的全局变量 C 允许在全局作用域中定义变量。这些变量在程序的整个生命周期内都存在,从程序开…...

量化投资中的数据驱动决策:大数据如何改变金融市场

随着科技的进步,金融行业迎来了前所未有的变革,量化投资作为其中的代表,逐渐成为投资市场的主流。量化投资是基于数学模型、数据分析以及算法策略的投资方式,与传统依赖经验和直觉的投资方法相比,它的核心优势在于能够…...

MySQL 设计数据表

一个数据表主要包含信息有 : 表名、主键、字段、数据类型、索引,本节主要介绍表的命名规范、字段命名、字段的数据类型选择。 新建的表都是新建在 “item_name” 数据库中的,新建 “item_name” 数据库命令如下 : CREATE DATABASE item_name;新建数据库…...

【大数据技术基础 | 实验一】配置SSH免密登录

文章目录 一、实验目的二、实验要求三、实验原理(一)大数据实验一体机(二)SSH免密认证 四、实验环境五、实验内容和步骤(一)搭建集群服务器(二)添加域名映射(三&#xff…...

地级市碳排放效率测算2006-2021年

为了测算碳排放效率,研究者们采用了多种方法,其中超效率SBM(Slack-Based Measure)和超效率CCR(Charnes, Cooper and Rhodes)模型是常用的两种方法。这些模型可以有效地评估决策单元的相对有效性&#xff0c…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...