如何在文本文件中查找和替换字符串数据

如何在文本文件中查找和替换字符串数据

我希望能够解析包含如下数据的文本文件:

2014-08-06 18:06:15 e:\shared\filename1.Shared orphan entry BM-100
2014-08-06 18:46:15 e:\shared\filename222.Shared orphan entry BM-214
2014-08-06 18:53:15 e:\shared\filename92.Shared orphan entry BM-674

这是在 Windows 上,我希望能够运行批处理文件脚本来删除 .shared 文件扩展名后面的日期字符串和文本。有什么想法吗?

答案1

您需要 Unix 实用程序sed,它可以处理正则表达式编辑,并且可用于多个 Windows 版本(只需查找执行文件)。如果你将文件名传递给批处理文件,它应该包含类似以下内容:

sed <"%1" 's/\.Shared .*$'//|sed 's/^.* .* //' >"%1.mod"

这将删除每行中的“。共享”到行尾,然后从行首到第二个空白,并将结果保存在传递的文件名中.mod附录。

当然,您可以删除其中一个或两个重定向,而是在调用批处理文件时重定向输入和/或输出。

答案2

如果你使用的是 Windows Vista 或更高版本,则可以使用 PowerShell

(gc D:\input.txt) | % {$_ -replace "2014", "xxx"} | sc D:\input.txt
  • gc myPathGet-Content 的别名用于读取文件
  • |将文本传送到下一个命令
  • ()必须使用,否则当你想写回输入文件时,输入文件仍然打开
  • % { ... }ForEach-Object 的别名,迭代每一行
  • -replace LookFor, ReplaceWith替换你的字符串
  • sc myPathSet-Content 的别名,用于将新内容写回到同一路径

进一步阅读

答案3

使用这个python脚本(它内置于大多数linux发行版中,并且很容易安装对于 Windows):

import sys

if __name__ == "__main__":
    input_file = sys.argv[1]
    output_file = sys.argv[2]

    with open(input_file) as fp:
        with open(output_file, 'w') as fp_w:
            for line in fp:
                fp_w.write("{}\n".format(line.split(' ')[2]))

你会得到这个输出:

e:\shared\filename1.Shared
e:\shared\filename222.Shared
e:\shared\filename92.Shared

创建python脚本的步骤:

  1. 创建一个名为parser.py(或任何你想叫的名字)的文件
  2. 将上面的代码复制到文件中
  3. 运行以下命令:

    python parser.py test.txt test_output.txt

    假设这test.txt是输入文件,并且test_output.txt是您想要将结果写入的文件路径。

答案4

Windows 命令提示符

for /f "tokens=2-3"   %i in (x.txt) do echo %i %j

结果是

18:53:15 e:\shared\filename92.Shared

(或者)

for /f "tokens=3"   %i in (x.txt) do echo %i

导致

e:\shared\filename92.Shared

相关内容