代码之家  ›  专栏  ›  技术社区  ›  jhon.smith

正则表达式替换日期部分

  •  1
  • jhon.smith  · 技术社区  · 6 年前

    我有一个文件

    我的尝试

    echo A_B_C_D_E_F_20180904_0038849_SUPER03.txt |sed -e 's/'_[0-9]{8}_.*'/'*.txt'/g'
    
    4 回复  |  直到 6 年前
        1
  •  0
  •   blhsing    6 年前

    有几件事需要改变:

    • 你不应该和警察一起跑 -e 选项,用于运行sed脚本
    • sed中不需要单引号
    • \{ \} 在sed的regex语法中表示量词
    • * 在替换文本中

    A_B_C_D_E_F.txt :

    echo A_B_C_D_E_F_20180904_0038849_SUPER03.txt |sed 's/_[0-9]\{8\}_.*/.txt/'
    
        2
  •  1
  •   cn007b Dheerendra Kulkarni    6 年前

    你可以试试这个:

    echo A_B_C_D_E_F_20180904_0038849_SUPER03.txt \
      |sed -e 's/_[0-9]\{8\}_[0-9]\{7\}_[A-Z0-9]*//g'
    

    哪里:
    _[0-9]\{8\} -匹配 _20180904
    _[0-9]\{7\} _0038849
    _[a-zA-Z0-9]* -匹配 _SUPER03

    结果是: A_B_C_D_E_F.txt

        3
  •  1
  •   potong    6 年前

    sed 's/_[0-9][^.]*//' file
    

    删除第一次出现的下划线,后跟一个整数,直到一个句点为止。

        4
  •  1
  •   oliv    6 年前

    如果您的文件名被分配给变量,而shell是 bash sed

    v="A_B_C_D_E_F_20180904_0038849_SUPER03.txt"
    echo "${v%_*_*_*}.${v#*.}"
    A_B_C_D_E_F.txt
    

    猛击 操作员 % #

    推荐文章