Update part of text in document
我有一个可以用记事本打开的.xal文件。以下是对我很重要的部分:
...
magV=1
invert=0
text=01000000237843141114052693183714
[Pri1]
enabled=0
...
我想创建一个脚本,它将自动替换第128行中文本140526的一部分(它是一些旧日期-2014年5月26日),并替换为当前日期。例如:今天应该是160816,明天应该是160817等。
如前所述,文本在第128行,字符从24到30。
如果到处搜索(sed查找win、vba、powershell,…),但我找不到任何有用的东西。
提前谢谢大家!
- 仍在扩展,但$1=获取内容。示例文件$1[128]将选择第128行,那么应该不难使用regex或类似的东西来替换字符。
如果您执行Windows批处理文件并使用SED,则工作正常
基本上,使用set和内置的DATE环境变量将年、月、日提取为6位字符串(DATE包含yy/mm/dd,需要删除斜线)然后只在第128行应用SED,创建一个组,将组+接下来的6个字符替换为同一组+新日期。
-i标志允许执行就地替换,以便更新输入文件,而不是在标准输出中输出结果。
1 2 3 4
| set D=%DATE%
set D=%D:~0,2%%D:~3,2%%D:~6,2%
echo %D%
sed -i"128s/\(text=..................\)....../\1%D%/" input.txt |
这里有一个使用PowerShell的解决方案:
1 2 3
| $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' |
- 谢谢,我试过你的方法,但还没好。我在PowerShellISE中调试代码,在调试的中间,我得到了这个->01000000237843111160816452693183714。如您所见,其中仍然有以前的文本(140526),之后添加了今天的日期。输出应为01000000237841116081693183714。好的,但在最后检查输出文件时,第128行的文本仍然与输入文件中的文本相同->01000000237843141114052693183714,看起来什么都没有更改??
- 我编辑了我的答案。再试一次。
- 现在,我在输出文件中得到的所有信息都是->text=0100000023784314111160816452693183714。还需要其他文本。
- arg,抱歉-我无法测试脚本,因为我没有示例文件。现在应该修复…
- 我很感谢你的帮助,所以一点也不抱怨:)现在它工作得很好,除了上面提到的一件事---旧文本(140526)应该换成新的(160816),现在如果你看我的输出010000002378431*1[160816]40526*93183714,它们是并排的。我标记了**之间的旧文本和[]之间的新文本。
- 我再次编辑了我的答案来解决这个问题;—)。如果你的问题解决了,请考虑接受答案。
- 很完美!我真的非常感谢你的帮助,我今天学到了一些新的东西:)