Start learning with our library of video tutorials taught by experts. Get started
Viewers: in countries Watching now:
Unix for Mac OS X Users unlocks the powerful capabilities of Unix that underlie Mac OS X, teaching how to use command-line syntax to perform common tasks such as file management, data entry, and text manipulation. The course teaches Unix from the ground up, starting with the basics of the command line and graduating to powerful, advanced tools like grep, sed, and xargs. The course shows how to enter commands in Terminal to create, move, copy, and delete files and folders; change file ownership and permissions; view and stop command and application processes; find and edit data within files; and use command-line shortcuts to speed up workflow. Exercise files accompany the course.
In this chapter we're going to take a look at some of the most useful and powerful Unix commands. Up until now we've really been covering the fundamentals and getting familiar with Unix, but now we are at the point where we can start doing some serious work, and the most powerful tool in the Unix toolbox by far is grep. Grep is a powerful way for us to search for text which matches patterns that we specify, and we aren't just talking about searching for simple text strings. We can define complex matching patterns by using regular expressions, and regular expression are actually part of how grep gets its name.
Grep stands for Global Regular Expression Print. If you think back to the movie where we talked about Unix text editors, I told you that the earliest Unix text editor was called ed or Ed, and if you were working inside the ed text editor and you wanted to search for something, the way you did it was by typing a g, then a forward slash and then a regular expression that described what you were going to search for, another forward slash and then p, for print. And G stood for global, meaning globally search for it, and p for print meant to output the results, and the shorthand that described that pattern, global regular expression print, become shortened to just be rep and it is these regular expressions often just called regex or regexp for short that give grep its power.
Grep and regular expressions have been around since the earliest days of Unix. You might have guessed that since it was available in this early text editor, ed, but they were actually created for Unix. By now though, grep and regular expression was spread to most programming languages, into many text editors as well, so they're useful in a lot of context. It's really worth trying to learn how they work. We'll focus on regular expressions in the next movie. First, let's get familiar with grep by using simple text strings. So to begin with, notice that I'm in my user directory and I'll just change into my Unix files directory and let's take a look at what's in there.
File that we're going to start out working with is fruits.txt. That's just a simple list of fruit that we created earlier and what we're going to do be doing is search inside this file for an expression. We're going to start with just searching by a simple text string to begin with. And what you also might say is that you're going to grep that file. It is perfectly acceptable to use grep as a verb. So we're going to grep this file for text string. The way that we will do that is with grep, space, then the expression that we want to search for, we're going to search for Apple.
Now this is still an expression, even though it's the simplest expression possible. It's the literal characters, a-p-p-l-e, but it is still a regular expression that it's passing in. So grep for Apple inside the file fruit.txt. That's all there it is to it. We hit Return and it comes back and what it returns to us are the results. The results that we're seeing are the three lines that contain a match. Not just the three words, the three lines. What I mean by that is in our case each of our lines only had one word on it, but if that first line had been Tom likes apples and the second line was Mary likes pineapples, then it would return the entire line, not just the single word apple.
It would have returned the line that had a match, so don't be confused by that. We're actually seeing the entire line that gets returned. It's also a case-sensitive match. So for example, if we search for apple with a capital A, well, then it comes back and it says no matches, because it checked for case-sensitive search and looked for apple exactly as we specified it and it wasn't there. If we wanted to be insensitive, we can pass an option for that, I. That's a case insensitive search and now it doesn't care. It doesn't care if I have upper or lower case a in my expression and it doesn't care whether it's upper or lowercase a in the results.
It will still match. I is probably the single most common option that you would use with grep, but there are a number of others. You can use the man pages to look through all of them. Let me show you a few of the more useful ones. Notice for example that it matched both Apple and pineapple. If we were to use the -w option, that will match only on whole words. I'm going to take away the capital A to make sure that that still matches. Now notice it didn't find the pineapple. It only found the two whole word matches apple and apple and it's smart about how it finds words. It uses spaces and punctuation and line returns to know where the word breaks are.
Now we also could write a more complex regular expression that would do the same thing and we'll that little bit later, but this is sort of the quick and easy way. Another nice one is the V option. So with the V, we'll get our lines that don't match. I is the reverse, the inversion of our regular search. So notice now apple and pineapple are missing from the list. We've essentially filtered them out. So all lines that do not match is what we're looking for. We could do the in option. In option is nice because it gives us line numbers. So it numbers the line, so it says, all right, I found a match in line 5 and here's the line.
I found the match in line 6 and here's the line. A match in line 13 and here's the one. Now you may not actually be interested in seeing those results. Maybe what you're interested in is actually just counting them and you can do that with the C option. grep c, it comes back and says ah, I found it three times. An example of a place that where that might be more useful, if we do grep inside lorem_ipsum, let's search for lore. So it's our long fake Latin text. It comes back and it says, ah, the word lorem occurs in there 44 times.
Now notice also how fast that was. It's really, really fast about being able to search in there looking for this text. That's part of the power of Unix, is being able to do these things and do them in a really, really fast way.
Find answers to the most frequently asked questions about Unix for Mac OS X Users.
Here are the FAQs that matched your search "":
Sorry, there are no matches for your search ""—to search again, type in another word or phrase and click search.
Access exercise files from a button right under the course name.
Search within course videos and transcripts, and jump right to the results.
Remove icons showing you already watched videos if you want to start over.
Make the video wide, narrow, full-screen, or pop the player out of the page into its own window.
Click on text in the transcript to jump to that spot in the video. As the video plays, the relevant spot in the transcript will be highlighted.