File 读取文本文件并替换其中的单词 例如,考虑一个文件“abc .txt”具有以下内容

File 读取文本文件并替换其中的单词 例如,考虑一个文件“abc .txt”具有以下内容,file,tcl,File,Tcl,{GRAPHIC_FILE_1=“E:/ge-work/hyperview-scripting/name.inp”} {GRAPHIC_FILE_1=“E:/ge work/hyperview scripting/result.rst”} {GRAPHIC_FILE_1=“E:/ge work/hyperview scripting/abaqusresult.odb”} 因此,我需要一个脚本,它将读取“*.rst”的这个.txt文件,并替换为给定的名称,例如“badapple.rst” 或者我将

{GRAPHIC_FILE_1=“E:/ge-work/hyperview-scripting/name.inp”}

{GRAPHIC_FILE_1=“E:/ge work/hyperview scripting/result.rst”}

{GRAPHIC_FILE_1=“E:/ge work/hyperview scripting/abaqusresult.odb”}

因此,我需要一个脚本,它将读取“*.rst”的这个.txt文件,并替换为给定的名称,例如“badapple.rst”

或者我将输入“result.rst”搜索它,并将其替换为“badapple.rst”,保持不变,并将所有其他行复制到新文件中

而且我无法更改它应该准确写入的文本文件的语法
{GRAPHIC_FILE_1=“E:/ge work/hyperview scripting/badaapple.rst”}

要将文件中的一个字符串替换为另一个字符串,尤其是在更改字符串长度的情况下,如果将整个文件加载到内存中,在那里执行更改,然后再次将其写回,您会发现最简单的方法

set filename "abc.txt"

# Read in the file
set f [open $filename]
set content [read $f]
close $f

# Alter what is on $content here; !!READ BELOW!!

# Write out the file; assumes we've got the newlines in the content already
set f [open $filename "w"]
puts -nonewline $f $content
close $f
那中间缺的那块呢?嗯,这完全取决于你想要做出什么样的改变。细节在这里很重要。但是,如果我们想将
result.rst
替换为
badapple.rst
,那么使用
字符串映射
(将精确字符串替换为其他精确字符串)非常简单:

交换每个
*.rst
有点棘手,因为我们需要定义此处真正匹配的
*
。我猜它不包括目录分隔符或双引号!鉴于此,
regsub-all
是一个更合适的工具

regsub -all {[^\\/""]+\.rst} $content "badapple.rst" content
省略
-all
将使其仅替换第一个匹配实例

正则表达式是:

  • [^\\\/”“]
    -匹配任何不是(
    ^
    )反斜杠、正斜杠或双引号的字符,有些字符由于各种原因(包括引号和可读性)而加倍
  • +
    -前一段中的一个或多个字符(即一个或多个非坏字符)
  • \.
    -句号(需要反斜杠,因为
    是重元字符)
  • rst
    -三个文字字母字符

如果你在写你自己的REs,总是把它放在
{
大括号
}

可能是@RakeshNair的副本,因为它也很纠结。谢谢你,非常感谢
regsub -all {[^\\/""]+\.rst} $content "badapple.rst" content