Во FreeBSD есть ряд команд , которые используют тот же API, что и GNU дата
для ввода дат на естественном языке от пользователя . Я только что нашел одну, которую можно обмануть, преобразовав эту дату во время эпохи Unix:
/usr/sbin/fifolog_reader -B 'last sunday' /dev/null 2>&1 |
sed 's/^From[[:blank:]]*\([0-9]*\).*/\1/p'
(обратите внимание, что, по крайней мере, на FreeBSD 9.1-RELEASE-p2, где я это примерял, она, кажется, работает надежно только в том случае, если вы находитесь в UTC-таймзоне, а распознаваемые ею спецификации дат не обязательно совпадают с распознаваемыми датами GNU).
Обратите внимание, что некоторые оболочки имеют такую возможность встроены.
ksh93
:
if (( timestamp < $(printf '%(%s)T' 'last sunday') )); then
zsh
:
autoload calendar_scandate
calendar_scandate 'last sun'
if (( timestamp < REPLY)); then...
Или вы можете использовать perl
и Date::Manip
, если установлено:
last_sun=$(perl -MDate::Manip -e 'print UnixDate("last sunday","%s")')
if [ "$timestamp" -lt "$last_sun" ]; then...
Или:
if perl -MDate::Manip -e 'exit 1 unless $ARGV[0] < UnixDate("last sunday","%s")
' "$timestamp"; then....
Если целью является проверка временных меток файлов, то обратите внимание, что FreeBSD находит поддержку
:
find file -prune -newermt 'last sunday'
В этом самом случае, если вам нужно время начала этой недели (недели, начинающиеся в воскресенье), вы можете сделать:
week_start=$(($(date '+%s - 86400*%w - 3600*%H - 60*%M - %S')))
Это должно работать как в GNU, так и в FreeBSD (или в любой другой системе, где поддерживается %s
).
В часовых поясах с летним временем, которые будут отключены на час вокруг переключателя с/на летнее время.
.
Два шага:
print, если только m! Gmail.com! Hotmail.com | ... !
(обычное выражение огромно, но проблем нет) All.txt
Код:
perl -n0E 's/\n/|/g; say "print unless m!\\b($_ç)\\b!\n" ' remove.txt > AUX
perl -n AUX All.txt > outfile
Update1:
для учета регистра добавьте i
в операторе сопоставления:
perl -n0E 's/\n/|/g; say "print unless m!@($_=)\\b!i\n" ' remove.txt > AUX
Update2 , чтобы иметь дополнительные домены удаления: создайте новый файл со списком исключений (extra.txt) и:
cat remove.txt extra.txt |
perl -n0E 's/\n/|/g; say "print unless m!@($_=)\\b!i\n" ' > AUX
perl -n AUX All.txt > outfile
{ sed -ne's/./^[^,]*,[^,]*&/p' |
grep -vf- ./All.txt
} <./remove.txt >./outfile
Я думаю, это то, о чем вы спрашиваете. Я не уверен, какое отношение это имеет к ruby
или к строке данных, о которой вы говорите ...
Если вы хотите, чтобы совпадения не учитывали регистр, просто добавьте ] -i
параметр gnore case для grep
, например:
{ sed -ne's/./^[^,]*,[^,]*&/p' |
grep -ivf- ./All.txt
} <./remove.txt >./outfile