#!/bin/bash
for i in dir_for_files/*; do
filename=${i%%#*}
sorted_tags=$(grep -o "#[^.]*" <<< "$i" | sort -n | tr '\n' ' ')
ext=${i#*.}
echo mv "$i" "${filename}${sorted_tags% }.$ext"
done
Тестирование:
##### Before sorting #####
$ ls -1 dir_for_files
Note (3) #textfile #notes #important.txt
Sunrise (2) #wallpaper #4k #googleimages.jpg
Sunset (2) #wallpaper #2k #images.jpg
$./sort_tags.sh
##### After sorting #####
$ ls -1 dir_for_files
Note (3) #important #notes #textfile.txt
Sunrise (2) #4k #googleimages #wallpaper.jpg
Sunset (2) #2k #images #wallpaper.jpg
В вашей команде есть лишний пробел
sed -i 's/$$EDWS_DATE_INSERT<extra_space>=.*/$$EDWS_DATE_INSERT="$(date `+%y%m%d`)"/' abc.txt
Думаю, вы ищете:
sed -i "s/\$\$EDWS_DATE_INSERT=.*/\$\$EDWS_DATE_INSERT=$(date '+%y%m%d')/" abc.txt
Еще лучше:
sed -E -i "s/(\\\$\\\$EDWS_DATE_INSERT=).*/\1$(date '+%y%m%d')/" abc.txt
Выход:
line1
line2
line3
$$EDWS_DATE_INSERT=190827
line4
$$EDWS_PREV_DATE_INSERT=08-26-2019
Заменить одинарные кавычки sed
на двойные кавычки. Замена обратных галочек на одинарные кавычки.
РЕДАКТИРОВАТЬ :моя предыдущая команда была неправильной . Обновлено фиксированной командой.