bash - 删除所有 Unicode 空格并替换为普通空格

2023-11-24

我有一个包含很多文本的文件,并且混合有特殊的space人物, 那些是统一码空间

我需要将它们全部替换为normal“空间”字符。


轻松使用 perl:

perl -CSDA -plE 's/\s/ /g' file

但正如 @mklement0 在评论中正确所说,它将匹配\t(选项卡)也是如此。如果这是问题,您可以使用

perl -CSDA -plE 's/[^\S\t]/ /g'

Demo:

X             X

上述内容包含:

U+00058 X LATIN CAPITAL LETTER X
U+01680   OGHAM SPACE MARK
U+02002   EN SPACE
U+02003   EM SPACE
U+02004   THREE-PER-EM SPACE
U+02005   FOUR-PER-EM SPACE
U+02006   SIX-PER-EM SPACE
U+02007   FIGURE SPACE
U+02008   PUNCTUATION SPACE
U+02009   THIN SPACE
U+0200A   HAIR SPACE
U+0202F   NARROW NO-BREAK SPACE
U+0205F   MEDIUM MATHEMATICAL SPACE
U+03000   IDEOGRAPHIC SPACE
U+00058 X LATIN CAPITAL LETTER X

using:

perl -CSDA -plE 's/\s/_/g'  <<<"X             X"

注意,对于替换为下划线的演示,打印

X_____________X

另外,可以使用纯 bash

LC_ALL=en_US.UTF-8 spaces=$(printf "%b" "\U00A0\U1680\U180E\U2000\U2001\U2002\U2003\U2004\U2005\U2006\U2007\U2008\U2009\U200A\U200B\U202F\U205F\U3000\UFEFF")

while read -r line; do
    echo "${line//[$spaces]/ }"
done

The LC_ALL=en_US.UTF-8仅当您的默认区域设置不是必需的时才需要UTF-8。 (如果你使用 utf8 文本,你应该拥有它):) 演示:

str="X             X"
echo "${str//[$spaces]/_}"

再次打印:

X_____________X

同样使用sed- 准备变量$spaces如上所述并使用:

sed "s/[$spaces]/ /g" file

Edit- 因为一些奇怪的复制/粘贴(或区域设置)问题:

xxd -ps <<<"$spaces"

shows

c2a0e19a80e1a08ee28080e28081e28082e28083e28084e28085e28086e2
8087e28088e28089e2808ae2808be280afe2819fe38080efbbbf0a

the md5摘要(两个不同的程序)

md5sum <<<"$spaces"
LC_ALL=C md5 <<<"$spaces"

打印相同的md5

35cf5e1d7a5f512031d18f3d2ec6612f  -
35cf5e1d7a5f512031d18f3d2ec6612f
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bash - 删除所有 Unicode 空格并替换为普通空格 的相关文章

随机推荐

  • 1 DIV 上有多种背景颜色

    我有一个div 我想使用 CSS3 在其上水平应用 2 个背景 但我无法弄清楚 所以我将不胜感激任何帮助 background blue top no repeat 10 background yellow bottom no repeat
  • 将资源(图像、声音等)嵌入到 Java 项目中,然后使用这些资源

    我搜索了一种在 java 项目中嵌入资源的方法 使用 Eclipse v3 6 0 然后在控件中使用该嵌入资源 例如 JLabel 我见过从文件系统引用资源的方法 项目开发完成后 我想将应用程序发布为可执行文件 应该注意的是 这些可执行文件
  • 模态引导程序内的表单

    我有一个进行产品注册的模式 我想在模式内提交表单而不离开模式 a href myModal class btn Launch demo modal a div class modal hide fade div class modal he
  • 如何在BottomBar布局android中添加中间按钮

    我想在底部栏布局的中间添加像超大按钮这样的 facebook Messenger 但很困惑如何添加 脸书信使 我正在使用 ahbottomnavigation 库来制作我的底栏 我只是想让它变得简单 而不是专业类型 看这里 BottomSh
  • Ruby 脚本中的 Unicode 字符?

    我想编写一个 Ruby 脚本 将日语字符写入控制台 例如 puts 今日 但是 我在运行时遇到异常 jap rb 1 Invalid char 377 in expression jap rb 1 Invalid char 376 in e
  • 检测 Firebase 连接是否丢失/恢复

    是否有一种策略可以在当前的 Firebase 产品中起作用来检测服务器连接是否丢失和 或恢复 我正在考虑移动设备的一些离线意外情况 并且我希望有一种可靠的方法来确定 Firebase 数据层何时可用 这是一项普遍要求的功能 我们刚刚发布了
  • 默认参数作为非静态成员变量

    我想创建一个具有两个整数成员变量的类和一个具有两个可选参数的函数 如果提供了这些参数 该函数将返回它们的总和 如果未提供这些参数 则该函数返回其两个成员变量的总和 这是代码 class Foo private int x int y pub
  • Python 中列表中最长的元素链

    我有一个国家列表 我想要最长的国家路径 其中选择的每个国家必须以与前一个元素结尾相同的字母开头 nations albania andorra austria belarus belgium bosnia and herzegovina b
  • 从 adb 向 BroadcastReceiver 发送意图

    我有 BroadcastReceiver 类 public class IntentReceiver extends BroadcastReceiver final String tag Intent Intercepter Overrid
  • 将图像从 iPhone 发布到 .NET Web 服务时出现“System.InvalidOperationException:请求格式无效:multipart/form-data”错误

    我正在尝试将 iPhone 应用程序中的图像发布到 Net Web 服务 但遇到了此错误 我已经更新了我的 web config这篇知识库文章我可以成功发布到以字符串作为参数的方法 我的问题是尝试用图像发布数据 我尝试过发帖this way
  • 项目中的 build.gradle 与应用程序中的 build.gradle

    我在 Android Studio 中使用 IntelliJ 启动了一个项目 该项目包括两个文件 名为build gradle 文件夹下有一个app 其中一个位于主文件夹下 这是我的项目名称 比如说MyProject 为什么需要两个 两者有
  • CALayer.contents 在 AVMutableComposition 中无法正确呈现

    我有一个非常简单的方法 可以生成一个视频 该视频具有覆盖整个视频合成的静态背景图像和位于视频底部的较小的部分透明图像 水印样式 背景图像渲染正确 并且与图像查看器中的外观完全相同 然而 应该在视频底部渲染的图像是倾斜 扭曲的 源代码可以在
  • 为什么实例变量是final的?

    I read 这个问题关于不可变对象 并留下了关于不可变对象和最终字段的问题 为什么不可变类中的实例变量需要是final的 例如 考虑这个不可变的类 public final class Immutable private final in
  • Pandas 数据框组:对一列求和,从其他列中取出第一个元素

    我有一个熊猫数据框 x pd DataFrame from dict row 1 1 2 2 3 3 3 add 1 2 3 4 5 6 7 take1 a b c d e f g take2 11 22 33 44 55 66 77 ra
  • TFS 通过名称获取用户

    我正在尝试添加由 Excel 中的 TFS API 运行的测试 在 Excel 的一个字段中 我得到了执行测试的用户 我想在服务器中更新它为了更新它我需要让用户作为TeamFoundationIdentity ims tfs GetServ
  • C 中的可移植嵌套函数

    是否可以使用嵌套函数 块编写可移植的 C 代码 我知道 gcc 仅支持嵌套函数作为非标准扩展 而 clang 仅支持块 但有没有办法编写可以使用标准 C 和 MACROS 来编译的代码 如果不可能 最好的解决办法是什么 举个例子 如何实现以
  • 使用委托条件对 C# 列表进行二分搜索

    我有一个List
  • document.defaultView.getCompulatedStyle 和 window.getCompulatedStyle 之间有什么区别

    当获取元素的样式时 我们总是使用 if document defaultView document defaultView getComputedStyle 检查浏览器是否支持该方法 为什么不使用if window getComputedS
  • Jenkins不允许同一作业在同一节点上同时运行?

    我有 4 个节点和 2 个作业 任何节点可以同时运行2个作业 并且任何作业都可以并发执行 我希望能够限制在同一台机器上同时运行相同的作业 例如 职位 J1 和 J2 节点 N1 N2 N3 和 N4 我可以在同一个节点上同时运行 J1 和
  • bash - 删除所有 Unicode 空格并替换为普通空格

    我有一个包含很多文本的文件 并且混合有特殊的space人物 那些是统一码空间 我需要将它们全部替换为normal 空间 字符 轻松使用 perl perl CSDA plE s s g file 但正如 mklement0 在评论中正确所说