Вы можете использовать Vim в режиме Ex:
ex -sc 'g/\.png/d' -cx file
g
глобальный поиск
d
удалить
x
сохранить и закрыть
звучит как:
TOCHECK=( "01-20170228-12345678" "012-20170230-012345678" "01-20170228-12345678" "123-20170730-012345678" )
for CHECK in $(seq 0 $(( ${#TOCHECK[@]}-1 )) ); do
PARTS=( $(echo ${TOCHECK[$CHECK]} | sed "s/-/ /g") )
echo -ne "\nchecking "
echo "\"${PARTS[@]}\""
echo "\"${PARTS[0]}\""
echo "\"${PARTS[1]}\""
echo "\"${PARTS[2]}\""
if echo ${PARTS[0]} | grep "[0-9]\{3\}" ; then
echo first part ok
fi
if echo ${PARTS[2]} | grep "[0-9]\{9\}" ; then
echo last part ok
fi
date --date="${PARTS[1]}"
RES=$?
echo $RES
if [ 0$RES -eq 0 ]; then
echo date OK
fi
done
(просто некоторая концептуальная идея, разумеется, с изменениями)
Это проверяет каждый файл в текущем каталоге с помощью оператора bash [[
на соответствие шаблону:
^
-
-
.pdf
$
Вы можете достаточно легко скорректировать приведенные выше допущения.
for f in *
do
[[ $f =~ ^([0-9][0-9][0-9])-([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])-([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]).pdf$ ]] &&
date -d ${BASH_REMATCH[2]} &>/dev/null &&
echo Valid: "$f"
done
Недостаточно использовать регулярные выражения. Проверка состоит из 2 шагов :сопоставления регулярных выражений и проверки даты. Вот реализация Python:
from __future__ import print_function
import sys
import re
import datetime
def validate(filename):
match = re.match(r"[0-9]{3}-([0-9]{8})-[0-9]{8}\.pdf", filename)
if not match:
return False
datestr = match.group(1)
try:
datetime.date(int(datestr[:4]), int(datestr[4:6]), int(datestr[6:8]))
except ValueError:
return False
else:
return True
if __name__ == "__main__":
if validate(sys.argv[1]):
print(":-)")
sys.exit(0)
else:
print(":-(")
sys.exit(1)
Использование:python validate.py FILE
Вероятно, можно использовать grep и date, чтобы сделать то же самое.
Одно базовое решение с использованием grep
. Не выполняет подробный аспект проверки даты, вместо этого просто проверяет его числовое значение.
if ls|grep -vE '^[0-9]{3}-[0-9]{8}-[0-9]{8}\.pdf$'; then
echo some bogus files found
else
echo all good
fi