[Missing Semester 04] Lecture 4
- Doc no.
- KKZ-TN-041
- Date
- 2024-10-15
- GMT day
- 2024:289
- Est. read
- 7 min
# journalctl run remotely, grep run locally
ssh myserver journalctl | grep sshd
# both commands run remotely
ssh myserver "journalctl | grep sshd"01sed#
sed (Stream Editor) is a powerful command-line tool in Unix/Linux that is used for parsing and transforming text, typically used for finding, replacing, or deleting content in a file or input stream.
Common sed Commands:
- Substitution (
s):
sed 's/pattern/replacement/' file- s: The substitution command.
- pattern: The string or pattern to search for.
- replacement: The string to replace the pattern with.
Example:
sed 's/apple/orange/' fruits.txtThis replaces the first occurrence of the word "apple" with "orange" on each line.
- Delete (
d):
sed '/pattern/d' fileDeletes all lines that match a given pattern.
- Print (
p):
sed -n 'p'Prints lines (used with -n to suppress default behavior).
Example:
# This will print lines 2 and 3
sed -n '2,3p' example.txt1.1Basic, Common, and Most-Used Regular Expressions (Regex)#
Basic Regex Symbols and Their Meaning#
Quantifiers specify how many instances of a character, group, or character class must be present in the input for a match.
.(dot): Matches any single character except a newline.- Regex:
a.b - Matches:
"a1b","axb","a b" - Does not match:
"ab","a\nb"
- Regex:
*(asterisk): Matches zero or more occurrences of the preceding character.- Regex:
ca*t - Matches:
"ct","cat","caat","caaaaat"
- Regex:
+(plus): Matches one or more occurrences of the preceding character.- Regex:
ca+t - Matches:
"cat","caat" - Does not match:
"ct"
- Regex:
?(question mark): Matches zero or one occurrence of the preceding character.- Regex:
ca?t - Matches:
"cat","ct" - Does not match:
"caat"
- Regex:
{}(braces): Matches a specific number of occurrences.{n}: Exactlynoccurrences.- Regex:
a{3} - Matches:
"aaa"
- Regex:
{n,}: At leastnoccurrences.- Regex:
a{2,} - Matches:
"aa","aaa","aaaa"
- Regex:
{n,m}: Betweennandmoccurrences.- Regex:
a{2,4} - Matches:
"aa","aaa","aaaa" - Does not match:
"a","aaaaa"
- Regex:
Anchors (for Position Matching)#
Anchors don’t match characters, but rather positions in the string.
^(caret): Matches the start of a string.- Regex:
^hello - Matches:
"hello world" - Does not match:
"world hello"
- Regex:
$(dollar sign): Matches the end of a string.- Regex:
world$ - Matches:
"hello world" - Does not match:
"world hello"
- Regex:
\b(word boundary): Matches the position between a word character (\w) and a non-word character.- Regex:
\bcat\b - Matches:
"cat is here","I have a cat" - Does not match:
"caterpillar","catch"
- Regex:
Grouping and Alternation#
Parentheses
(): Used to group part of the regex for applying quantifiers or capturing matches.- Regex:
(ab)+ - Matches:
"ab","abab","ababab" - Does not match:
"a","b","aab"
- Regex:
Pipe
|(Alternation): Acts like a logical OR, matching either of the patterns.- Regex:
cat|dog - It looks for the entire word
- Matches:
"cat"or"dog"
- Regex:
Summary of Most-Used Regex Elements#
| Regex Symbol | Meaning |
|---|---|
. | Any single character (except newline) |
* | Zero or more of the previous element |
+ | One or more of the previous element |
? | Zero or one of the previous element |
{n} | Exactly n occurrences |
^ | Start of a string |
$ | End of a string |
\[\] | Character class (match any character inside) |
\d | Any digit (0-9) |
\w | Any word character (alphanumeric + underscore) |
\s | Any whitespace character |
| ` | ` |
() | Grouping |
1.2Example Use of sed with Regex#
Command:
sed 's/[0-9]/#/g'Explanation:
- This will replace all digits (
\[0-9\]) in the input with#(\is the escape character here).
ssh myserver journalctl
| grep sshd
| grep "Disconnected from"
| sed -E 's/.*Disconnected from (invalid |authenticating )?user (.*) [^ ]+ port [0-9]+( \[preauth\])?$/\2/'
| sort | uniq -c
| sort -nk1,1 | tail -n10
| awk '{print $2}' | paste -sd,sort -k 1,1: The -k option specifies the sort key, which determines which part of the line should be used for sorting.
1,1means the sort is done based on the first field (column).- Fields are separated by whitespace by default.
1,1restricts the sorting to the first field only, and no other part of the line is used for sorting.
paste -sd: This command can combine lines of input.
-s: The-soption tells paste to merge all the input lines into a single line (instead of pasting them side by side).-d,: The-doption specifies the delimiter, which in this case is a comma (,). It tells paste to join the items using a comma.
02awk#
awk is a powerful command-line tool used for text processing and data extraction in Unix/Linux environments. It operates on files or input streams, typically treating each line as a record, and each part of the line as a field. awk is ideal for extracting specific fields, performing operations on data, and formatting output.
2.1Basic awk Command Format:#
awk 'pattern { action }' [file]pattern: The condition or pattern that determines which linesawkwill process.action: The operation to perform on the lines that match the pattern.file: The input file (or input from stdin if no file is provided).
2.2Basic Examples#
1. Print Every Line of a File#
awk '{ print $0 }' filenameThis command prints every line of the file ($0 refers to the entire line).
2. Print a Specific Field#
awk '{ print $2 }' filenameThis prints the second field ($2) of each line in the file.
Example Input (example.txt)#
John 25 Manager
Jane 30 Developer
Tom 22 Designerawk '{ print $1 }' example.txtOutput:
John
Jane
TomThis prints only the first field (name) from each line.
2.3Common awk Use Cases#
1. Print Specific Fields#
You can specify which fields (columns) to print using $1, $2, etc.
awk '{ print $1, $3 }' example.txtOutput:
John Manager
Jane Developer
Tom Designer2. Specify a Field Separator#
By default, awk assumes fields are separated by whitespace. You can change the field separator using the -F option.
Example with a CSV file:
John,25,Manager
Jane,30,Developer
Tom,22,DesignerTo print the first and third fields of a CSV file:
awk -F',' '{ print $1, $3 }' example.csvOutput:
John Manager
Jane Developer
Tom DesignerHere, -F',' tells awk to use a comma as the field separator.
3. Conditional Processing#
You can apply conditions to control which lines are processed.
Example: Print lines where the second field (age) is greater than 25.
awk '$2 > 25 { print $1, $2 }' example.txtOutput:
Jane 30This prints only the lines where the second field (age) is greater than 25.
4. Perform Arithmetic Operations#
awk can perform arithmetic on fields.
Example: Add 10 to each person's age.
awk '{ print $1, $2 + 10 }' example.txtOutput:
John 35
Jane 40
Tom 325. Pattern Matching#
You can use regular expressions to match patterns.
Example: Print lines that contain the word "Developer":
awk '/Developer/ { print $0 }' example.txtOutput:
Jane 30 DeveloperYou can use awk to process lines that match (or don't match) specific patterns.
2.4Advanced Features of awk#
1. BEGIN and END Blocks#
awk allows you to define special actions at the start and end of processing.
- BEGIN: Executes before processing the input.
- END: Executes after processing all input.
Example: Calculate the sum of ages.
awk 'BEGIN { sum = 0 } { sum += $2 } END { print "Total age:", sum }' example.txtOutput:
Total age: 77Here:
- The
BEGINblock initializes thesumvariable to 0. - The main block
{ sum += $2 }adds the second field (age) to the sum for each line. - The
ENDblock prints the total after processing all lines.
2. Built-in Variables#
awk has several built-in variables:
NR: Current record number (line number).NF: Number of fields in the current record.$0: The entire line.
Example: Print each line with its line number.
awk '{ print NR, $0 }' example.txtOutput:
1 John 25 Manager
2 Jane 30 Developer
3 Tom 22 Designer3. String Manipulation#
awk provides functions to manipulate strings, like length(), substr(), tolower(), and toupper().
Example: Print the length of the first field.
awk '{ print $1, length($1) }' example.txtOutput:
John 4
Jane 4
Tom 32.5Summary of awk Usage#
| Command | Description |
|---|---|
awk '{ print $1 }' file | Print the first field (column) of each line. |
awk -F',' '{ print $2 }' file | Specify a field separator (comma in this case). |
awk '$2 > 25 { print $1 }' file | Print the first field if the second field is greater than 25. |
awk 'BEGIN { action } { action } END { action }' file | Use BEGIN and END blocks for initialization and final actions. |
awk '{ print NR, $0 }' file | Print the line number along with the entire line. |
awk is a versatile tool for processing and extracting data from text files or input streams. It’s great for manipulating structured data, performing arithmetic, and applying conditions based on patterns.
03Exercises#
https://regexone.com/lesson/introduction_abcs -> Great tutorial!