从文件中提取带有分隔符“/”的最后一个字符串

时间:2014-09-23 00:57:19

标签: regex string powershell split delimiter

我有一个文本文件,其中包含一组UNIX PATH格式的字符串。我需要从每个字符串中提取最后一个字符串,该字符串由'/'。

分隔
/Public/Home/Call/Reports/Weekly Template/C555 Weekly Report - Monday
/Public/Home/Call/Reports/Weekly Template/C567 Weekly Report - Monday
/Public/Home/Call/Reports/Weekly Template/C555 Weekly Report - Tuesday
/Public/Home/Claim Repo/Reports/Weekly Set/@Weekly Report - $100 for Monday
/Public/Home/Claim Report/Reports/Weekly Not Set/ Weekly Report - Monday

我需要在Windows机器上运行这些,因此需要PowerShell或批处理。 我需要帮助来解决脚本问题,该脚本也可以允许空格和特殊字符,并且可以读取.TXT文件并以下面的格式输出完整的字符串:

/Public/Home/Call/Reports/Weekly Template       C555 Weekly Report - Monday
/Public/Home/Call/Reports/Weekly Template       C567 Weekly Report - Monday
/Public/Home/Call/Reports/Weekly Template       C555 Weekly Report - Tuesday
/Public/Home/Claim Repo/Reports/Weekly Set      @Weekly Report - $100 for Monday
/Public/Home/Claim Report/Reports/Weekly Not Set     Weekly Report - Monday

我在另一个答案中找到了一个解决方案:

http://stackoverflow.com/questions/20004597/extracting-string-after-last-instance-of-delimiter-in-a-batch-file

它的代码如下:

for %%a in (%param:\= %) do set lastDir=%%a
:nextParam
   set "param=%~1"
   if not defined param goto endParams
   for %%a in (%param:\= %) do set lastDir=%%a
   echo Last dir: %lastDir%
   shift
goto nextParam
:endParams

或者,以更简单的方式(没有空格限制):

:nextParam
   if "%~1" equ "" goto endParams
   echo Last dir: %~N1
   shift
goto nextParam
:endParams

但是,我希望能够满足字符串中的空格和特殊字符的需要,但以上情况并非如此。

2 个答案:

答案 0 :(得分:1)

在PowerShell中你会这样做:

Get-Content foo.txt | Where {$_ -match '/'} | Foreach {$_.Substring($_.LastIndexOf('/')+1)}

管道的Where阶段是过滤掉空行和否则不指定路径的行。

答案 1 :(得分:0)

如果工作,请尝试此操作

(get-content foo.txt) -replace '.*/'

说明:'。* /' :吃掉所有的字符,直到字符串和回溯中的最后一个位置,直到它找到第一个' /'

|a|b|/|c|/|d|
---------|-->
         | <-
         |<--