[Surfraw-devel] Patch: use awk instead of sed for listing elvi

Kyle Isom kyle at imap.cc
Mon Sep 14 04:31:53 UTC 2015


Hello,

In response to Keith's earlier email, I swapped out awk for sed in
the list_elvi function in surfraw. The awk syntax for doing this is
more portable across different implementations of awk than the
equivalent sed expression.

Tested on OS X 10.10.5:
$ awk --version
GNU Awk 4.1.3, API: 1.1
...
$ mawk -W version
mawk 1.3.4 20141027

Test on Debian GNU/Linux 8.2 (jessie):
$ gawk --version
GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p3, GNU MP 6.0.0)
$ mawk -W version
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
$ original-awk --version
awk version 20121220

Test on OpenBSD 5.7 GENERIC.MP#3 i386:
$ awk -V
awk version 20110810
---
 surfraw.IN | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/surfraw.IN b/surfraw.IN
index 0de3c96..8471216 100755
--- a/surfraw.IN
+++ b/surfraw.IN
@@ -323,9 +323,9 @@ w3_parse_option_hook () {
 }
 
 list_elvi() {
-    local dir="$1"
-    sed -n 's/^.*elvis:[ 	]\+\(.*\)$/\1/p' $(find "$dir" ! -type d ! -type l ! -name '*~' | sort)
-    for script in $(find "$dir" ! -type d -type l | sort) ; do
+    local_dir="$1"
+    awk '/^#[ 	]+elvis:[ 	]+/{ sub("^# elvis: ",""); print $0; }' $(find "$local_dir/" ! -type d ! -type l ! -name '*~' | sort | xargs)
+    for script in $(find "$local_dir/" ! -type d -type l | sort) ; do
 	printf '%-16s--> %s\n' $(basename "$script") $(basename $(readlink "${script}"))
     done
 }


Cheers,
Kyle



More information about the Surfraw-devel mailing list