Вариант zsh
, который маскирует три четверти текста:
mask() printf '%s\n' ${(l:$#1::*:)1:$#1*3/4}
Пример:
$ mask secretvalue
********lue
$ mask 12345678
******78
$ mask 1234
***4
Чтобы замаскировать первые 8 символов:
mask() printf '%s\n' ${(l:$#1::*:)1:8}
Чтобы замаскировать все, кроме последних 3 символов:
mask() printf '%s\n' ${(l:$#1::*:)1: -3}
Чтобы замаскировать случайное число символов:
mask() printf '%s\n' ${(l:$#1::*:)1: RANDOM%$#1}
Вы можете использовать цикл while
, где условие основано на возможности чтения из стандартного ввода:
$ cat input.txt
Mar 16
Mar 12
Mar 13
Mar 19
Mar 14
Mar 17
$ cat ex.sh
#!/bin/bash
datediff() {
local d1="$(date -d "$1" +%s)"
local d2="$(date -d "$2" +%s)"
echo "$(( (d1 - d2) / 86400 )) days"
}
while read line; do
datediff 'now' "${line}"
done < "${1}"
$./ex.sh input.txt
111 days
115 days
114 days
108 days
113 days
110 days
Здесь сценарий принимает единственный аргумент :входной файл. Хотя он может прочитать строку из файла, он вызывает вашу функцию datediff
, передавая now
и содержимое line
, прочитанное из файла.
Добавление надежной поддержки календаря — сложная задача, и я рекомендую использовать для этого специальную программу. К счастью, кто-то сделал всю тяжелую работу за нас.
изhttp://www.unixwiz.net/tools/datemath.html:
Too many times we have needed to do a bit of math on a date -- say, "today + 7 days" -- but in traditional MM/DD/YYYY format this is really tricky (especially in a shell script). A result of this need we built the datemath tool which can perform these functions from the command line or from a shell script. Examples:
$ datemath today + 5
06/23/2003
$ datemath '12/25/2003 - today'
188
$ datemath today + 5 weeks
07/25/2003
when will my machine be up for one year?
$ uptime
11:09am up 317 days, 15:38, 7 users, load average: 0.16, 0.04, 0.01
$ datemath today + 365 - 317
10/24/2003
Вы можете скачать исходный код с веб-сайта и собрать его.