Groups | Search | Server Info | Login | Register
Groups > comp.unix.shell > #1778
| From | Stephane CHAZELAS <stephane_chazelas@yahoo.fr> |
|---|---|
| Newsgroups | comp.unix.shell, comp.unix.programmer, comp.programming.contests |
| Subject | Re: The First Pure Shell Contest (PUSH): relativepath |
| Date | 2011-08-21 16:19 +0000 |
| Organization | A noiseless patient Spider |
| Message-ID | <slrnj52c0v.d41.stephane.chazelas@spam.is.invalid> (permalink) |
| References | <9b7kg7F3njU1@mid.individual.net> <slrnj5050s.gg9.stephane.chazelas@spam.is.invalid> <87fwkuzw9r.fsf@sapphire.mobileactivedefense.com> |
Cross-posted to 3 groups.
2011-08-21, 15:14(+01), Rainer Weikusat:
> Stephane CHAZELAS <Stephane.CHAZELAS@free.fr> writes:
>> 2011-08-19, 17:23(+00), Jens Schweikhardt:
>> [...]
>>> Write a POSIX shell function named 'relativepath' which takes as
>>> arguments two absolute canonicalized pathnames, and stores the relative
>>> path from the first to the second in the variable "result" or "." when
>>> the arguments are the same. Example: relativepath /foo/bar /foo/baz sets
>>> result to "../baz".
>> [...]
>>
>> In the not-answering-the-question category, what about:
>>
>> printf '%s\n' "$1//$2/"|sed -e:1 -e'$!{N;b1' -e} -e'
>> s|/////*|///|;s|\(.*/\)\(.*/\)\1|\2|;:2
>> s|^[^/]*/\(\(.*/\)*/\)|\1../|;t2
>> s|^/||;s|/$||;s/^$/./'
>
> It's a nice demonstration that some people really excel in the art of
> creating complicated solutions to simple problems.
It might look complicated as sed is not very verbose, but it's
quite simple. The core is in one substitution and one loop with
only one substitution per iteration.
sed is the only POSIX tool I know that has a built-in way to
find the longest leading common string in two strings (well,
with expr(1)(*) and ex/vi) which makes it probably the best tool
for the task which is what "pure shell programming" should be
IMO.
(*)
$ expr 'foobarbaz foobarfoo' : '\(.*\).* \1'
foobar
--
Stephane
Back to comp.unix.shell | Previous | Next — Previous in thread | Next in thread | Find similar
The First Pure Shell Contest (PUSH): relativepath Jens Schweikhardt <schweikh@schweikhardt.net> - 2011-08-19 17:23 +0000
Re: The First Pure Shell Contest (PUSH): relativepath Stephane CHAZELAS <stephane_chazelas@yahoo.fr> - 2011-08-19 18:13 +0000
Re: The First Pure Shell Contest (PUSH): relativepath Jens Schweikhardt <usenet@schweikhardt.net> - 2011-08-19 19:12 +0000
Re: The First Pure Shell Contest (PUSH): relativepath pk <pk@pk.invalid> - 2011-08-19 21:14 +0200
Re: The First Pure Shell Contest (PUSH): relativepath Jens Schweikhardt <usenet@schweikhardt.net> - 2011-08-19 19:29 +0000
Re: The First Pure Shell Contest (PUSH): relativepath pk <pk@pk.invalid> - 2011-08-19 21:37 +0200
Re: The First Pure Shell Contest (PUSH): relativepath Jens Schweikhardt <usenet@schweikhardt.net> - 2011-08-19 20:04 +0000
Re: The First Pure Shell Contest (PUSH): relativepath pk <pk@pk.invalid> - 2011-08-19 22:25 +0200
Re: The First Pure Shell Contest (PUSH): relativepath Jens Schweikhardt <usenet@schweikhardt.net> - 2011-08-19 21:08 +0000
Re: The First Pure Shell Contest (PUSH): relativepath Rainer Weikusat <rweikusat@mssgmbh.com> - 2011-08-19 19:58 +0100
Re: The First Pure Shell Contest (PUSH): relativepath Jens Schweikhardt <usenet@schweikhardt.net> - 2011-08-19 19:23 +0000
Re: The First Pure Shell Contest (PUSH): relativepath Rainer Weikusat <rweikusat@mssgmbh.com> - 2011-08-19 22:18 +0100
Re: The First Pure Shell Contest (PUSH): relativepath Stephane CHAZELAS <Stephane.CHAZELAS@free.fr> - 2011-08-20 20:07 +0000
Re: The First Pure Shell Contest (PUSH): relativepath Jens Schweikhardt <usenet@schweikhardt.net> - 2011-08-21 10:43 +0000
Re: The First Pure Shell Contest (PUSH): relativepath Rainer Weikusat <rweikusat@mssgmbh.com> - 2011-08-21 15:14 +0100
Re: The First Pure Shell Contest (PUSH): relativepath Janis Papanagnou <janis_papanagnou@hotmail.com> - 2011-08-21 18:28 +0300
Re: The First Pure Shell Contest (PUSH): relativepath Stephane CHAZELAS <stephane_chazelas@yahoo.fr> - 2011-08-21 16:19 +0000
Re: The First Pure Shell Contest (PUSH): relativepath Stephane CHAZELAS <stephane_chazelas@yahoo.fr> - 2011-08-21 20:12 +0000
Re: The First Pure Shell Contest (PUSH): relativepath Rainer Weikusat <rweikusat@mssgmbh.com> - 2011-08-22 21:15 +0100
Re: The First Pure Shell Contest (PUSH): relativepath Stephane CHAZELAS <stephane_chazelas@yahoo.fr> - 2011-08-23 18:23 +0000
Re: The First Pure Shell Contest (PUSH): relativepath Rainer Weikusat <rweikusat@mssgmbh.com> - 2011-08-23 19:52 +0100
Re: The First Pure Shell Contest (PUSH): relativepath Stephane CHAZELAS <stephane_chazelas@yahoo.fr> - 2011-08-23 21:56 +0000
csiph-web