From owner-freebsd-questions@FreeBSD.ORG Wed Jun 16 13:44:22 2010 Return-Path: Delivered-To: questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4F14A1065672 for ; Wed, 16 Jun 2010 13:44:22 +0000 (UTC) (envelope-from aiza21@comclark.com) Received: from avmxsmtp3.comclark.com (avmxsmtp3.comclark.com [202.69.191.117]) by mx1.freebsd.org (Postfix) with ESMTP id DAFA88FC18 for ; Wed, 16 Jun 2010 13:44:21 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AqgSAMJxGEzKRa1bPGdsb2JhbAAHgxaEUpcVAQEBATWudZBogSaDBW8Eg1A X-IronPort-AV: E=Sophos;i="4.53,426,1272816000"; d="scan'208";a="4093696" Received: from unknown (HELO [10.0.10.3]) ([202.69.173.91]) by avmxsmtp3.comclark.com with ESMTP; 16 Jun 2010 21:44:19 +0800 Message-ID: <4C18D532.6090306@comclark.com> Date: Wed, 16 Jun 2010 21:44:18 +0800 From: Aiza User-Agent: Thunderbird 2.0.0.17 (Windows/20080914) MIME-Version: 1.0 To: Matthew Seaman References: <4C18B276.4080900@comclark.com> <4C18B813.7020608@infracaninophile.co.uk> In-Reply-To: <4C18B813.7020608@infracaninophile.co.uk> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: "questions@freebsd.org" Subject: Re: .sh and sed X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 Jun 2010 13:44:22 -0000 Matthew Seaman wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On 16/06/2010 12:16:06, Aiza wrote: >> Trying to use sed to remove the path from the file name. >> Variable has complete path plus the file name >> /usr/local/etc/filename >> Need variable containing only the file name. >> Is the sed utility the best thing to use? >> Is there some other utility better suited for this task. >> How would sed by coded to do this? > > sh(1) can do this alone, without recourse to any external programs. > > path='/usr/local/etc/filename' > fname=${path##*/} > echo $fname > > There is also an external program basename(1) > > The same trick with sed(1): > > fname=$( echo $path | sed -e 's,^.*/,,' ) > > but the built-in prefix matching stuff is preferable since it is more > efficient. > > Cheers, > > Matthew > > - -- Thanks for your help. The fname=${path##*/} solution worked for.