首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文件中提取带有分隔符'/‘的最后一个字符串

从文件中提取带有分隔符'/‘的最后一个字符串
EN

Stack Overflow用户
提问于 2014-09-23 00:57:18
回答 2查看 299关注 0票数 0

我有一个文本文件,它包含一组UNIX路径格式的字符串。我需要从每个字符串中提取由'/‘分隔的最后一个字符串。

代码语言:javascript
复制
/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文件并以以下格式输出完整的字符串:

代码语言:javascript
复制
/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

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

代码语言:javascript
复制
http://stackoverflow.com/questions/20004597/extracting-string-after-last-instance-of-delimiter-in-a-batch-file

它的代码是:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
:nextParam
   if "%~1" equ "" goto endParams
   echo Last dir: %~N1
   shift
goto nextParam
:endParams

但是,我也想满足字符串中的空格和特殊字符的需要,而上面没有这样做。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-23 04:04:07

如果工作的话,试试这个

代码语言:javascript
复制
(get-content foo.txt) -replace '.*/'

说明:'.*/‘:把所有的字符吃到字符串中的最后一个位置,然后回溯直到找到第一个'/’。

代码语言:javascript
复制
|a|b|/|c|/|d|
---------|-->
         | <-
         |<--
票数 0
EN

Stack Overflow用户

发布于 2014-09-23 01:32:03

在PowerShell中,您可以这样做:

代码语言:javascript
复制
Get-Content foo.txt | Where {$_ -match '/'} | Foreach {$_.Substring($_.LastIndexOf('/')+1)}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25985268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档