about summary refs log tree commit diff
path: root/Functions/Example
diff options
context:
space:
mode:
authorStephane Chazelas <stephane.chazelas@gmail.com>2021-09-06 14:43:01 -0700
committerBart Schaefer <schaefer@ipost.com>2021-09-06 14:43:01 -0700
commitbb61da36aaeeaa70413cdf5bc66d7a71194f93e5 (patch)
tree4fa62b5e09077ddee7988a2e89fda4154bfd458b /Functions/Example
parenta6139bb0a9392c2c90071e7f4013af6e93ceae6c (diff)
downloadzsh-bb61da36aaeeaa70413cdf5bc66d7a71194f93e5.tar.gz
zsh-bb61da36aaeeaa70413cdf5bc66d7a71194f93e5.tar.xz
zsh-bb61da36aaeeaa70413cdf5bc66d7a71194f93e5.zip
45180: clarify doc for POSIX EREs, fix an issue with PCRE when the replacement was empty or generated more than one element
Diffstat (limited to 'Functions/Example')
-rw-r--r--Functions/Example/zpgrep15
1 files changed, 11 insertions, 4 deletions
diff --git a/Functions/Example/zpgrep b/Functions/Example/zpgrep
index 8b1edaa1c..556e58cd6 100644
--- a/Functions/Example/zpgrep
+++ b/Functions/Example/zpgrep
@@ -2,24 +2,31 @@
 #
 
 zpgrep() {
-local file pattern
+local file pattern ret
 
 pattern=$1
 shift
+ret=1
 
 if ((! ARGC)) then
 	set -- -
 fi
 
-pcre_compile $pattern
+zmodload zsh/pcre || return
+pcre_compile -- "$pattern"
 pcre_study
 
 for file
 do
 	if [[ "$file" == - ]] then
-		while read -u0 buf; do pcre_match $buf && print $buf; done
+		while IFS= read -ru0 buf; do
+			pcre_match -- "$buf" && ret=0 && print -r -- "$buf"
+		done
 	else
-		while read -u0 buf; do pcre_match $buf && print $buf; done < "$file"
+		while IFS= read -ru0 buf; do
+			pcre_match -- "$buf" && ret=0 && print -r -- "$buf"
+		done < "$file"
 	fi
 done
+return "$ret"
 }