【问题标题】:Remove last instance of \ in a text file删除文本文件中 \ 的最后一个实例
【发布时间】:2021-05-13 10:26:52
【问题描述】:

我想在一个文本文件中去除 \ 的最后一个实例。 \ 处于浮动位置并且出现不同。

我想从 Unix 命令行实现它并将其放入 shell 脚本中。这适用于运行 J.P. Software 4nt、tcc、tccle 的 Windows 10 v20H2 x86。我还为基于 unix 的命令实现了 MKS 工具包

例如。我使用 cmd 提示符中的以下内容来创建输入文本原始文件:

set dr=d:\!Mp3_A-Z
echo Reading All Folders in Drive %dr...
dir/b /s %dr"\"*.mp3 > %destfolder\!geb3raw.lst

输入的 txt 文件有超过 100,000 行。

例如:来自原始 txt 文件的输入

D:\!Mp3_A-Z\!AB^5117\ABBA (Rock 061619)\ABBA - Dancing Queen '128k '03_52.mp3
D:\!Mp3_A-Z\!AB^5117\!Band - RJG (Rock 061519)\Nightsoil (1972 Beckford St Tapes) 06 - Smile Away '128k '04_40.mp3

输出:

ABBA - Dancing Queen '128k '03_52.mp3
Nightsoil (1972 Beckford St Tapes) 06 - Smile Away '128k '04_40.mp3

【问题讨论】:

  • 我知道您只想要文件名。这可以在 Linux 上使用命令basename 完成。但是,您要求使用 unix 命令,但您提供的数据是 Windows 格式。 `\` 在 unix 上的含义与在 Windows 上的含义不同。请澄清您的问题。
  • 我已经用 [shell] 标签和术语 shell 脚本替换了您的批处理文件引用和 [batch-file] 标签,正如您特别提到的“unix cmd 行”。如果您的意思有所不同,请在关闭之前查看您的标签并澄清您的问题。另请使用tour,并阅读How to Ask 的所有页面,以了解为什么您的代码请求在这里被视为题外话,不应得到答复。
  • 通常情况下,Unix 模拟器包会替换 find 这样的命令,Windows 的意思是“在文件中定位字符串”,而 Unix 的意思是“查找文件”。 Windows 命令执行您似乎想做的事情(仅生成文件名的文件,没有路径)将是 for /f "usebackq delims=" %%b in ("%destfolder%\!geb3raw.lst") do echo %%~nxb >>newfilename.txt 注意到 %destfolder%,而不是 %destfolder 被解析为“变量 destfolder>> 附加到任何现有文件,因此您需要先删除该目标文件。
  • 在 Unix 术语中,您似乎想要的是文件的“基本名称”——文件路径名的最后一个组成部分。如果文件名与 Unix 约定匹配,则有一个 Unix basename 命令将提供您想要的输出。我不知道该命令在您的环境中是否可用,也不知道它是否会处理反斜杠而不是文件名中的斜杠。试试看——它可能会奏效。

标签: bash shell batch-file text-processing


【解决方案1】:

试试这个:

sed 's/.*\\//' myfile.txt

这会替换所有内容,包括反斜杠在内的所有内容都没有。

【讨论】:

  • 工作就像一个魅力!修改为输入 > 输出。 sed 's/.*\\//' rawfile.txt > stripped.txt
猜你喜欢
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 2019-06-08
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
相关资源
最近更新 更多