This shows you the differences between two versions of the page.
ep:labs:03:contents:tasks:ex3 [2019/10/13 18:46] radu.mantu |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 02. [20p] You vs grep ==== | ||
- | === [10p] Task A - Your grep === | ||
- | |||
- | Write a python3 script that receives a list of files from //stdin// (one per line) and an arbitrary number of words as command line arguments. The script must search for these words in each file and output each line that contains at least one of them in this format: | ||
- | |||
- | <code> | ||
- | <file_name>:<line_number>:<line> | ||
- | </code> | ||
- | |||
- | Note that if a line contains more than one word, it still must appear only once in your output. | ||
- | Your program should be run like this: | ||
- | |||
- | <code bash> | ||
- | $ find . | ./my_grep.py import for sys | ||
- | </code> | ||
- | |||
- | === 03. [10p] Task B - Compare to grep === | ||
- | |||
- | Use any commands that you have learned in this or any other lab to compare your implementation to **grep** (at least one must be related to I/O). Test case: | ||
- | |||
- | <code bash> | ||
- | $ find /usr/include/ | ./my_grep.py int include define for | ||
- | $ grep -rn "int\|include\|define\|for" /usr/include/ | ||
- | $ grep -Frn -f <(echo "int\ninclude\ndefine\nfor") /usr/include | ||
- | </code> | ||
- | |||
- | What algorithm does **grep** use? What about **grep -F** or **fgrep**? |