我在給定的目錄中有一組檔案名(長度相同),并希望在檔案名的給定位置范圍內找到所有不同的子字串(將有許多具有相同子字串的檔案名)。
具體來說,我感興趣的子字串從檔案名的第 7 位開始,長度為 10 個字符
for file in *; do
if [ -d "$file" ]; then
file_basename=`basename $file`
substr=${file_basename:7:10}
done
我想將這些唯一的子字串寫入檔案或資料結構,然后我可以回圈訪問。
所以檔案名的集合
........12s456tyer..........
........12s436tyer..........
........12s456tyer..........
........12s436tyer..........
會導致2個字串
12s456tyer
12s436tyer
uj5u.com熱心網友回復:
如果您使用 bash 4.0 或更新版本,您可以創建一個唯一的關聯陣列:
declare -A distinct_substrings=()
shopt -s nullglob # Prevent '*' from expanding to a literal '*'
for file in *; do
if [[ -f $file ]]; then
file_basename=${file##*/} # Not necessary if files are expanded from current dir.
substr=${file_basename:7:10}
distinct_substrings[$substr]=$substr
fi
done
# Do stuff with "${distinct_substrings[@]}"
uj5u.com熱心網友回復:
您無需回圈即可執行此操作:
printf '%s\n' * | cut -c 9-18 | sort -u >outputfile.txt
僅對檔案執行此操作并排除目錄(需要 bash):
#!/usr/bin/env bash
shopt -s extglob
printf %s\\n *!(/) | cut -c 9-18 | sort -u >outputfile.txt
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407353.html
標籤:
