| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2014-02-26 09:36:43 -05:00
										 |  |  | #  Chet Ramey <chet.ramey@case.edu> | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #  Copyright 2002 Chester Ramey | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #   This program is free software; you can redistribute it and/or modify | 
					
						
							|  |  |  | #   it under the terms of the GNU General Public License as published by | 
					
						
							|  |  |  | #   the Free Software Foundation; either version 2, or (at your option) | 
					
						
							|  |  |  | #   any later version. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #   TThis program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | #   but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | #   GNU General Public License for more details. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #   You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  | #   along with this program; if not, write to the Free Software Foundation, | 
					
						
							|  |  |  | #   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  | # substr -- a function to emulate the ancient ksh builtin | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # -l == remove shortest from left | 
					
						
							|  |  |  | # -L == remove longest from left | 
					
						
							|  |  |  | # -r == remove shortest from right (the default) | 
					
						
							|  |  |  | # -R == remove longest from right | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | substr() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	local flag pat str | 
					
						
							|  |  |  | 	local usage="usage: substr -lLrR pat string or substr string pat" | 
					
						
							|  |  |  | 	local options="l:L:r:R:" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	OPTIND=1 | 
					
						
							|  |  |  | 	while getopts "$options" c | 
					
						
							|  |  |  | 	do | 
					
						
							|  |  |  | 		case "$c" in | 
					
						
							|  |  |  | 		l | L | r | R) | 
					
						
							|  |  |  | 			flag="-$c" | 
					
						
							|  |  |  | 			pat="$OPTARG" | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | 		'?') | 
					
						
							|  |  |  | 			echo "$usage" | 
					
						
							|  |  |  | 			return 1 | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | 		esac | 
					
						
							|  |  |  | 	done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if [ "$OPTIND" -gt 1 ] ; then | 
					
						
							| 
									
										
										
										
											2014-02-26 09:36:43 -05:00
										 |  |  | 		shift $(( $OPTIND -1 )) | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  | 	fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  | 	if [ "$#" -eq 0 ] || [ "$#" -gt 2 ] ; then | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  | 		echo "substr: bad argument count" | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	str="$1" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # | 
					
						
							|  |  |  |         # We don't want -f, but we don't want to turn it back on if | 
					
						
							|  |  |  |         # we didn't have it already | 
					
						
							|  |  |  |         # | 
					
						
							|  |  |  |         case "$-" in | 
					
						
							|  |  |  |         "*f*") | 
					
						
							|  |  |  |                 ;; | 
					
						
							|  |  |  |         *) | 
					
						
							|  |  |  |                 fng=1 | 
					
						
							|  |  |  |                 set -f | 
					
						
							|  |  |  | 		;; | 
					
						
							|  |  |  |         esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	case "$flag" in | 
					
						
							|  |  |  | 	-l) | 
					
						
							|  |  |  | 		str="${str#$pat}"		# substr -l pat string | 
					
						
							|  |  |  | 		;; | 
					
						
							|  |  |  | 	-L) | 
					
						
							|  |  |  | 		str="${str##$pat}"		# substr -L pat string | 
					
						
							|  |  |  | 		;; | 
					
						
							|  |  |  | 	-r) | 
					
						
							|  |  |  | 		str="${str%$pat}"		# substr -r pat string | 
					
						
							|  |  |  | 		;; | 
					
						
							|  |  |  | 	-R) | 
					
						
							|  |  |  | 		str="${str%%$pat}"		# substr -R pat string | 
					
						
							|  |  |  | 		;; | 
					
						
							|  |  |  | 	*) | 
					
						
							|  |  |  | 		str="${str%$2}"			# substr string pat | 
					
						
							|  |  |  | 		;; | 
					
						
							|  |  |  | 	esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	echo "$str" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # | 
					
						
							|  |  |  |         # If we had file name generation when we started, re-enable it | 
					
						
							|  |  |  |         # | 
					
						
							|  |  |  |         if [ "$fng" = "1" ] ; then | 
					
						
							|  |  |  |                 set +f | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  | } |