美文网首页
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

    相关文章

      网友评论

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

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