Fish Shell:
Using regular expressions
How to:
While Fish Shell itself does not have a built-in command for regex, it effectively uses external commands like grep, sed, and awk that support regex, allowing you to incorporate regex operations in your scripts.
Basic Pattern Matching with grep
Search for lines in a file that match a pattern:
grep '^[0-9]+' myfile.txtThis command finds lines starting with one or more digits in myfile.txt.
Extracting & Replacing with sed
Extract phone numbers from a file:
sed -n '/\([0-9]\{3\}\)-\([0-9]\{3\}\)-\([0-9]\{4\}\)/p' contacts.txtReplace all occurrences of “foo” with “bar” in data.txt:
sed 's/foo/bar/g' data.txtUsing string for Basic Regex
Fish Shell’s string command supports simple regex operations like match and replace:
Match a pattern in a string:
echo "fish 3.1.2" | string match -r '3\.[0-9]+\.[0-9]+'Output:
3.1.2Replace digits following ‘fish’ with ‘X.X.X’:
echo "Welcome to fish 3.1.2" | string replace -ra '([fish]+\s)[0-9\.]+' '$1X.X.X'Output:
Welcome to fish X.X.XAdvanced Matching with awk
Print the second column of data where the first column matches a specific pattern:
awk '$1 ~ /^a[0-9]+$/ {print $2}' datafileThis command looks for lines in datafile where the first column starts with an “a” followed by one or more digits and prints the second column.
By integrating these external commands, Fish Shell programmers can harness the full power of regular expressions for complex text manipulation tasks, enhancing the shell’s native capabilities.