【问题标题】:Update part of text in document [duplicate]更新文档中的部分文本[重复]
【发布时间】:2016-08-16 10:10:33
【问题描述】:

我有一个可以用记事本打开的.xal 文档。以下是对我很重要的部分:

...
magV=1
反转=0
text=01000000237843141114052693183714

[Pri1]
启用=0
...

我想创建一个脚本,它会自动替换第 128 行中的部分文本 140526(它是某个旧日期 - 26.05.2014)并将其替换为当前日期。
例如:今天应该是160816,明天应该是160817,等等

如前所述,文本在第 128 行,字符从 24 到 30。

如果四处搜索(SED for WIN、VBA、Powershell,...),但我没有找到任何可行的方法。

提前谢谢大家!

【问题讨论】:

  • 仍在进行但 $1 = get-content .\examplefile $1[128] 将选择第 128 行,那么使用正则表达式或类似的东西来替换字符应该不难

标签: windows powershell batch-file text replace


【解决方案1】:

如果您使用 Windows 批处理文件并使用 sed,则可以正常工作

基本上,使用set和内置的DATE环境变量将年、月、日提取为6位字符串(DATE包含yy/mm/dd,斜杠需要去掉) 然后仅在第 128 行应用 sed,创建一个组,将组 + 下一个 6 个字符替换为同一组 + 新日期。

-i 标志允许执行就地替换,以便更新输入文件而不是在标准输出中输出结果。

set D=%DATE%
set D=%D:~0,2%%D:~3,2%%D:~6,2%
echo %D%
sed -i "128s/\(text=..................\)....../\1%D%/" input.txt

【讨论】:

    【解决方案2】:

    这里是使用 PowerShell 的解决方案:

    $content = Get-Content 'your_file_path'
    $content[127] = $content[127] -replace '(.{24}).{6}', ('${{1}}{0}' -f (Get-Date).ToString('yyMMdd'))
    $content | Set-Content 'your_file_path'
    

    【讨论】:

    • 谢谢您,我尝试了您的解决方案,但(还)还不行。我在 Powershell ISE 中调试代码,在调试过程中我得到了这个 -> 01000000237843141111608164052693183714。如您所见,其中仍有先前的文本(140526),然后添加了今天的日期。输出应该是 01000000237843141116081693183714。好的,但是最后当我检查输出文件时,第 128 行仍然有与输入文件中相同的文本 - > 01000000237843141114052693183714,看起来什么都没有改变??
    • 我编辑了我的答案。再试一次。
    • 现在我在输出文件中得到的只是 -> text=01000000237843141111608164052693183714。还需要有其他文字。
    • Arg,抱歉 - 由于没有示例文件,我无法测试脚本。现在应该修好了……
    • 感谢您的帮助,所以完全没有抱怨 :) 现在它工作得很好,除了上面提到的一件事 -> 旧文本 (140526 ) 现在应该用新文本 (160816) 替换如果您查看我的输出 010000002378431411*1[160816]40526*93183714,它们是并排的。我在 ** 之间标记了旧文本,在 [ ] 之间标记了新文本。
    猜你喜欢
    • 1970-01-01
    • 2020-05-20
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2019-09-01
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多