Можно использовать -o
для "или":
find . -path '*/trunk/src/*.h' -o -path '*/trunk/src/*.cpp'
который совпадает с
find . -path '*/trunk/src/*' \( -name '*.h' -o -name '*.cpp' \)
Если Вы хотите выполнить grep на этих файлах:
find . \( -path '*/trunk/src/*.h' -o -path '*/trunk/src/*.cpp' \) -exec grep PATTERN {} +
или
find . -path '*/trunk/src/*' \( -name '*.h' -o -name '*.cpp' \) -exec grep PATTERN {} +
echo "${ruby_versions[@]}" | sed 's/\S\+:://g;s/\s\+/\n/g'| sort -u
выходы:
1.7.13
1.7.4
2.1.1
или если вы хотите Bash Встроенные
unset u
for i in "${ruby_versions[@]}"
do
if [[ ! $u =~ ${i##*::} ]]
then
u=${u:+$u\\n}${i##*::}
fi
done
echo -e "$u"
-121--108580- Я бы сделал шаг дальше (вдохновленный этим постом ):
# => 18:23:24 --> 66204
grep usb /var/log/kern.log|tail -2|awk '{print $3}'|awk -F: '{print ($1 * 3600) + ($2 * 60) + $3 }'
Итак, после того, как у меня было:
66204
66020
Вы могли бы сделать:
echo $((66204-66020)) # => 184
Если вы используете AWK
, вы можете сделать это в одном вызове
awk '
/usb/{
("date +%s -d "$3)|getline t[++i];
}
END{
print t[i-1]-t[i];
}' /var/log/kern.log
Ваш весь конвейер в awk без большого количества ненужных каналов.
Подобный costas, но не используя внешних команд.
awk '/usb/{split($3,a,":");b[++x]=(a[1]*3600)+(a[2]*60)+a[3]}END{print b[x-1]-b[x]}' /var/log/kern.log
Heres просто последний бит с датами, разработанными, если вы решаете сохранить каналы
awk '{split($1,a,":");b[x++]=(a[1]*3600)+(a[2]*60)+a[3]}END{print b[0]-b[1]}'
А более общее решение, потому что это работает с временами с различных дат, также:
echo "18:23:24
18:20:20" |
(read later_time; read former_time;
former_seconds=$(date --date="$former_time" +%s);
later_seconds=$(date --date="$later_time" +%s);
echo $((later_seconds-former_seconds)) )
184