在字符串

时间:2017-12-05 09:26:24

标签: regex bash sed rename

我有tran_crossings_exp_.txttran_buildings_exp_.shp这样的字符串 如何编写一个bash函数来测试点扩展名前的最后一个字符是否以下划线开头,并将下划线替换为tran_crossings_exp.txt这样的名称我知道如何在bash中获取文件的基本名称和扩展名< / p>

我已经完成了这个解决方案,但我正在寻找一种更优雅的方式,它还会检查文件是否确实有下划线,如果名称已经正确,则跳过它。

for file in `ls *_.*`;do ext="${file##*.}"; filename="${file%.*}";non=${file::-5}; mv ${file} ${non}.${ext};done

2 个答案:

答案 0 :(得分:0)

试试这个:

ObjectMapper mapper = new ObjectMapper();

    String result = mapper
      .writerWithView(JsonView.Extended.class)
      .writeValueAsString(member);

Here你可以测试一下

注意:这仅适用于#!/bin/bash filename=tran_crossings_exp_.txt i=${filename:${#filename}-5:1} // Take the 5th char from back if [ $i = "_" ]; then // If it is an underscore echo "${filename/?./.}" // Replace '?.' with just '.', this removes last '_' in this case (? means any character) else echo $filename fi (点和3个字符)扩展程序

修改

存储在同一个变量中

.abc

答案 1 :(得分:0)

如果文件只有一个点(。)和任何扩展名,则可以使用此功能。

它使用字符串替换。

一个底线可以看到删除下划线的结果:

public static int[][] sec (int [][] Sjm1, int [][] Sorted_Sjm2) { int k; int [][] output = new int [Sjm1.length][Sjm1[0].length]; for (int j = 0; j < Sjm1.length; j++) { k = 0; for (int m = 0; m < Sjm1[0].length; m++) { if (Sorted_Sjm2[j][m] == Sjm1[j][m]) { k=j; output[j][m] = k; break; } } } return output; }

说明:首先仅找到带有下划线,后跟点和某些扩展名的文件。然后使用字符串替换将find . -name "*_.*" | while IFS= read -r file; do echo "${file//_./.}"; done更改为_.

重命名:

.