Changes

Jump to: navigation, search

Tutorial 9 - Regular Expressions

5,907 bytes added, 12:15, 8 June 2023
m
Protected "Tutorial 9 - Regular Expressions": OER transfer ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))
Content under development
 
=USING REGULAR EXPRESSIONS=
<br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
= INVESTIGATION 1: SIMPLE & COMPLEX REGULAR EXPRESSIONS =
<span style="color:red;">'''ATTENTION''': The due date for successfully completing this tutorial (i.e. tutorial 89) is by Friday, December 15 April 21 @ 11:59 PM (Week 14).</span><br>
In this investigation, you will learn how to use the '''grep''' command with '''simple and complex regular expressions'''<br>to help search for ''patterns'' contained in text files.
# Make certain that you are located in your '''~/regexps''' directory on your ''Matrix'' account.<br><br>
# Issue the following Linux command to copy another data file called '''numbers2.dat''':<br><span style="color:blue;font-weight:bold;font-family:courier;">cp ~osl640/tutorial9/numbers2.dat .</nowiki></span><br><br>
# View the contents of the '''numbers2.dat''' file using the '''more''' command and quickly view the contents of this file.<br>You should notice ''valid'' and ''invalid'' numbers contained in this file. When finished, exit the more command.<br><br>[[Image:eregexps-1.png|thumb|right|300px|'''Weakness''' of '''complex''' regular expressions that do not '''limit''' the number of '''positive''' or '''negative''' signs.]]
# Issue the following Linux command to display '''signed''' or '''unsigned integers''':<br><span style="color:blue;font-weight:bold;font-family:courier;">grep "^[+-]*[0-9][0-9]*$" numbers2.dat</span><br><br>You should notice '''multiple''' '''+''' or '''-''' '''signs''' appear <u>prior</u> to some numbers.<br>This occurs since you are searching or one or MORE occurrences of a + or - sign.<br><br>Using '''extended regular expression''' symbols to specify '''minimum''' and '''maximum''' repetitions: '''{min,max}''' can solve that problem.<br><br>
# Scroll throughout the man pages for the ls command to view matches for the pattern "'''sort'''"<br>(You can press '''SPACE''' or key combination '''alt-b''' to move forward and backwards one screen respectively).<br><br>
# Press the letter <span style="color:blue;font-weight:bold;font-family:courier;">q</span> to '''exit''' the ''man'' pages for '''ls'''.<br><br>Let's use regular expressions with the '''less''' command.<br><br>
# Issue the following Linux command to download copy another data file called '''large-file.txt''':<br><span style="color:blue;font-weight:bold;font-family:courier;">wget <nowiki>https://ict.senecacollege.ca/cp ~murray.saulosl640/uli101tutorial9/large-file.txt</nowiki>.</span><br><br>[[Image:other-re-2.png|thumb|right|300px|Entering '''/uli101''' in the '''less''' command can display all matches of "'''uli101'''" throughout the text file. This is just sample output, you will be searching for '''osl640''' instead.]]
# Issue the following Linux command to view the contents of the '''large-file.txt''':<br><span style="color:blue;font-weight:bold;font-family:courier;">less large-file.txt</span><br><br>
#We want to search for a pattern '''uli101osl640''' within this text file.<br>Type the following regular expression and press ENTER:<br><span style="color:blue;font-weight:bold;font-family:courier;">/uli101osl640</span><br><br>You should see the pattern "uli101osl640" throughout the text file.<br><br>
# Press the letter <span style="color:blue;font-weight:bold;font-family:courier;">q</span> to exit the '''less''' command.<br><br>
# Try the same search techniques with the '''more''' command.<br><br>Does it work the same for the ''less'' command?<br><br>[[Image:other-re-3.png|thumb|right|300px|Entering '''/uli101''' in the '''vi''' command can search for the string "'''uli101'''". This is just sample output, you will be searching for '''osl640''' instead.]]Let's learn how to perform a simple '''search and replace''' within the '''vi''' utility<br>by using regular expressions.<br><br>
# Issue the following Linux command to edit the '''large-file.txt''' file:<br><span style="color:blue;font-weight:bold;font-family:courier;">vi large-file.txt</span><br><br>Let's first perform a simple search within this text file.<br><br>
# Press the '''ESC''' key to make certain you are in '''COMMAND''' mode.<br><br>
# Type the following and press '''ENTER''':<br><span style="color:blue;font-weight:bold;font-family:courier;">/uli101osl640</span><br><br>You should notice the pattern "'''uli101osl640'''" highlighted for ALL occurrences in this text file.<br><br>Let's '''search''' for the '''uli101osl640''' pattern, and '''replace''' it in capitals (i.e '''ULI101OSL640''').<br><br>In vi, to issue a command, you need to enter '''LAST LINE''' MODE then issue a command.<br>Let's issue a command from '''LAST LINE''' MODE to search and replace '''uli101osl640''' to '''ULI101OSL640'''.<br><br>[[Image:other-re-4.png|thumb|right|500px|In l'''ast line''' MODE in the '''vi''' text editor, issuing a command using regular expressions to convert '''uli101''' to '''ULI101'''. This is just sample output, you will be searching for '''osl640''' instead.]]# Making certain that you are '''COMMAND''' MODE in vi,<br>type the following and press '''ENTER''':<br><span style="color:blue;font-weight:bold;font-family:courier;">:%s/uli101osl640/ULI101OSL640/g</span><br><br>'''NOTE:''' The letter '''g''' after the replace regular expression represents "'''global'''" and will replace ALL occurrences of uli101 osl640 in the text document (as opposed to replacing the first occurrence for every line).<br><br># Type the following (in uppercase letters) and press '''ENTER''':<br><span style="color:blue;font-weight:bold;font-family:courier;">/ULI101OSL640</span><br><br>You should notice the pattern "'''ULI101OSL640'''" highlighted for ALL occurrences in this text file.<br><br># Navigate throughout the text file to confirm that ALL occurrences of '''uli101osl640''' have been <u>replaced</u> with '''ULI101OSL640'''.<br><br>
# Save changes to your vi editing session and exit by typing the following and pressing ENTER:<br><span style="color:blue;font-weight:bold;font-family:courier;">:x</span><br><br>
: After you complete the '''Review Questions''' section to get additional practice.
<br><br>
= LINUX PRACTICE QUESTIONS =
 
== REVIEW QUESTIONS: SIMPLE &amp; COMPLEX REGULAR EXPRESSIONS ==
Here is a link to the [https://matrix.senecacollege.ca/~osl640/questions/osl640_command_practice_9a.docx MS Word Document of ALL of the questions] displayed below but with extra room to answer on the document to simulate a quiz.
 
Your instructor may take-up these questions during class. It is up to the student to attend classes in order to obtain the answers to the following questions. Your instructor will NOT provide these answers in any other form (eg. e-mail, etc).
 
 
'''Part A: Display Results from Linux Commands using Simple &amp; Complex Regular Expressions'''
 
Note the contents from the following tab-delimited file called '''~osl640/cars''':
 
<pre>
Plym fury 77 73 2500
chevy nova 79 60 3000
ford mustang 65 45 10003
volvo gl 78 102 9850
ford ltd 83 15 10507
chevy nova 80 50 3503
fiat 600 65 115 450
honda accord 81 30 6000
ford thundbd 84 10 17000
toyota tercel 82 180 755
chevy impala 65 85 1553
ford bronco 83 25 9505
</pre>
 
Write the results of each of the following Linux commands using regular expressions for the above-mentioned file.
 
1. <span style="font-family:courier;font-weight:bold">grep plym ~osl640/cars</span><br>
2. <span style="font-family:courier;font-weight:bold">grep -i fury ~osl640/cars</span><br>
3. <span style="font-family:courier;font-weight:bold">grep “^[m-z]” ~osl640/cars</span><br>
4. <span style="font-family:courier;font-weight:bold">grep -i “^[m-z]” ~osl640/cars</span>
5. <span style="font-family:courier;font-weight:bold">grep “3$” ~mosl640/cars</span><br>
6. <span style="font-family:courier;font-weight:bold">grep -i “c.*5$” ~osl640/cars</span><br>
 
 
 
'''Part B: Writing Linux Commands Using Regular Expressions'''
 
Write a single Linux command to perform the specified tasks for each of the following questions.
 
7. Write a Linux command to display all lines in the file called '''~/text.txt''' that contains the pattern:
the<br>
8. Write a Linux command to display all lines in the file called '''~/text.txt''' that contains the word:
the<br>
9. Write a Linux command to display all lines in the file called '''~/text.txt''' that begin with a number.<br>
10. Write a Linux command to display all lines in the file called '''~/text.txt''' that end with a letter
(either upper or lowercase).<br>
11. Write a Linux command to display all lines in the file called '''~/text.txt''' that begin and end with a number.<br>
12. Write a Linux command to display all lines in the file called '''~/text.txt''' that contains exactly 3 characters that can be anything.<br>
13. Write a Linux command to display all lines in the file called '''~/text.txt''' that contains exactly 3 numbers.<br>
14. Write a Linux command to display all lines in the file called '''~/text.txt''' that contains 1 or more “C” characters.<br>
 
== REVIEW QUESTIONS: REGULAR EXPRESSIONS (INCLUDING EXTENDED REGULAR EXPRESSIONS) ==
Here is a link to the [https://matrix.senecacollege.ca/~osl640/questions/osl640_command_practice_9B.docx MS Word Document of ALL of the questions] displayed below but with extra room to answer on the document to simulate a quiz.
 
Your instructor may take-up these questions during class. It is up to the student to attend classes in order to obtain the answers to the following questions. Your instructor will NOT provide these answers in any other form (eg. e-mail, etc).
'''Part A: Display Results from Linux Commands using Regular Expressions'''
 
Note the contents from the following tab-delimited file called '''~murray.saul/uli101/numbers.txt''':
 
<pre>
+123
---34
+++++++++++17
-45
45p8
25.6
11
</pre>
 
Write the results of each of the following Linux commands using regular expressions for the above-mentioned file.
 
1. <span style="font-family:courier;font-weight:bold">grep "^[-+]" ~osl640/tutorial9/numbers.txt</span><br>
2. <span style="font-family:courier;font-weight:bold">grep "^[-+]*.[0-9]" ~osl640/tutorial9/numbers.txt</span><br>
3. <span style="font-family:courier;font-weight:bold">grep "^[+-]?[0-9]" ~osl640/tutorial9/numbers.txt</span><br> &nbsp; &nbsp;(Why?)<br>
4. <span style="font-family:courier;font-weight:bold">egrep "^[+-]?[0-9]" ~osl640/tutorial9/numbers.txt</span><br>
5. <span style="font-family:courier;font-weight:bold">egrep "^[+-]?[0-9]+$" ~osl640/tutorial9/numbers.txt</span><br>
6. <span style="font-family:courier;font-weight:bold">egrep "^[+-]?[0-9]+[.]?[0-9]+$" ~osl640/tutorial9/numbers.txt</span><br>
 
 
'''Part B: Writing Linux Commands Using Regular Expressions'''
 
Write a single Linux command to perform the specified tasks for each of the following questions.
 
 
7. Write a Linux command to display all lines in the file called '''~/data.txt''' that begins with 1 or more occurrences of an UPPERCASE letter.
 
8. Write a Linux command to display all lines in the file called '''~/data.txt''' that ends with 3 or more occurrences of the number 6
 
9. Write a Linux command to display all lines in the file called '''~/data.txt''' that begins with 2 or more occurrences of the word “the” (upper or lower case).
 
10. Write a Linux command to display all lines in the file called '''~/data.txt''' that begins with 2 or more occurrences<br> &nbsp; &nbsp; &nbsp; of the word “the” <u>or</u> the word “but” (upper or lower case).
 
11. Write a Linux command to display all lines in the file called '''~/data.txt''' that begins with a minimum of 2 occurrences<br> &nbsp; &nbsp; &nbsp; and a maximum of 4 occurrences of the word “the” or the word “but” (upper or lower case).
 
[[Category:OSL640]]

Navigation menu