See
Appendix A,
Exercise Answers
for answers.
-
Construct a regular expression that matches:
-
at least one
a
followed by any number of
b
's
-
any number of backslashes followed by any number of asterisks (any number might be zero)
-
three consecutive copies of whatever is contained in
$whatever
-
any five characters, including newline
-
the same word written two or more times in a row (with possibly varying intervening whitespace), where "word" is defined as a nonempty sequence of nonwhitespace characters
-
-
Write a program that accepts a list of words on
STDIN
and looks for a line containing all five vowels (
a
,
e
,
i
,
o
, and
u
). Run this program on
/usr/dict/words
[
] and see what shows up. In other words, enter:
$
myprogram
<
/usr/dict/words
(This presumes you name your program
myprogram
.)
-
Modify the program so that the five vowels have to be in order and intervening letters don't matter.
-
Modify the program so that all vowels must be in an increasing order, so all five vowels have to be present, and no "e" can occur before an "a", no "i" can occur before an "e", and so on.
-
Write a program that looks through
/etc/passwd
[
] (on
STDIN
), printing the login name and real name of each user. (Hint: use
split
to break the line up into fields, then
s///
to get rid of the parts of the
comment
field that are after the first comma.)
-
Write a program that looks through
/etc/passwd
(on
STDIN
) for two users with the same first name, and prints those names. (Hint: after extracting the first name, create a hash with the name for a key and the number of times it was seen as the value. When the last line of
STDIN
has been read, look through the associative array for counts of greater than one.)
-
Repeat the last exercise, but report the
login names of all users with the same first name. (Hint: instead of storing a count, store a list of login names separated by spaces. When finished, look through the values for ones that contain a space.)
|
|