我有tran_crossings_exp_.txt
和tran_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
答案 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
更改为_.
重命名:
.