美文网首页
Bash过滤特殊符号只允许中英文和下划线

Bash过滤特殊符号只允许中英文和下划线

作者: xun66 | 来源:发表于2023-01-05 05:21 被阅读0次

背景

在一个脚本中,想要把一个不安全的字符串放进文件名。需要达到几个目的:

  1. 空格最终转换为下划线
  2. 直接删除所有Ascii控制字符、路径不安全字符(如~, , / 等)
  3. 允许中文和所有unicode符号(也可以删除一些unicode空白符号,但是难以全部列举,而且这些字符作为文件名是安全的)
    找了一些资料没有符合自己要求的。

方案

使用如下的脚本(注意需要指定#!/bin/bash或其他shell,否则echo -n不生效)

#!/bin/bash
original="中文 Abc%^&*\/_发表的文章"
modified=$(echo -n "$original" | tr ' ' '_' | perl -Mopen=locale -ane 's/[\x{0000}-\x{002F}\x{005B}-\x{005E}\x{0060}\x{007B}-\x{00FF}]//g; print')
echo "Original: $original"
echo "Modified: $modified"

输出结果为:

Original: 中文 Abc%^&*\/_发表的文章
Modified: 中文_Abc_发表的文章

这个命令第一步通过tr将空格替换为_,然后再用perl将ascii范围的非法字符过滤掉。这个范围从ascii表中找到。

如果想要把特殊符号也转换成_,只需要把perl中的//g换成/_/g即可。

参考资料

  1. https://unix.stackexchange.com/a/442466

相关文章

  • UITextField输入框过滤表情

    UITextField输入框过滤 UITextField 输入框限制特殊字符的输入,只允许中英文及数字输入,直接上...

  • input正则表达式

    1、只允许输入数字 2、只允许输入英文字母、数字和下划线(以下二种方法实现) 或 3、只允许输入英文字母、数字和=...

  • bash环境变量的设置

    除了万用字符之外,bash环境中的特殊符号

  • Bash特殊符号

    在编写shellscripts的时候,特殊符号也有其重要的功能。具体描述如下:

  • Shell-Bash变量与运算符

    1、Bash中变量定义的规则 说明: 变量名称,有字母,数字和下划线组成,但是不能以数字开头 在 Bash 中变量...

  • Bash基础-通配符和特殊符号

    1、通配符(和各大编程语言中的差不多) 2、特殊符号(注意单引号和双引号德区别)

  • 过滤特殊符号

    在处理微博数据时,因为有很多不需要的特殊字符,所以需要过滤掉。使用re模块中的re.sub(arg1,arg2,a...

  • Modern Fortran Explained学习笔记2

    第二章部分 Fortran95的特殊符号除了26字母,10数字,下划线,主要的代码元素还包括下表所列出的特殊符号们...

  • 微信分享解决特殊符号转换成html 实体的问题

    在微信分享时,如果分享的标题里面含有下划线,空格等特殊符号,会转化成&mdash等特殊符号 微信分享时应该是为了安...

  • js 笔记

    5.21笔记: 1.变量的命名规范: 1.)变量名可以包含数字 字母 和下划线 $ 但不可以以数字和特殊符号开头...

网友评论

      本文标题:Bash过滤特殊符号只允许中英文和下划线

      本文链接:https://www.haomeiwen.com/subject/wiidcdtx.html