我有一个文件(Flags.txt
),如下所示:
...
C_INCLUDES = ... ... .../xxx
...
CXX_INCLUDES = ... ... .../yyy
C_INCLUDES
行可以以任何字符串结尾(例如xxx
)。
最后,文件应如下所示:
...
C_INCLUDES = ... ... .../xxx/
...
CXX_INCLUDES = ... ... .../yyy
因此,我想使用Windows批处理文件(不能使用sed
或awk
)来搜索名称C_INCLUDES
,并在行尾添加正斜杠(但可以是任何符号,例如“xxxz”或“xxx!”)?
我尝试了以下解决方案:
$original = "flags.txt"
$tempfile = "tmp.txt"
get-content $original | foreach-object {
if ($_ -match "^C_INCLUDES") {
$_ + "/" >> $tempfile
}
else {
$_ >> $tempfile
}
}
copy-item $tempfile $original
remove-item $tempfile
但它不起作用
由于
答案 0 :(得分:2)
您暗示您不能使用第三方(非本机)exe文件,例如sed。但您可以使用批处理文件。
所以使用JREPL.BAT - a regular expression find/replace text processing utility应该没问题。 JREPL是纯脚本(混合批处理/ JScript),可以在任何Windows机器上从XP开始本地运行 - 不需要第三方exe文件。
可以从命令行通过jrepl /?
或jrepl /??
获取完整文档以获取分页帮助。
一旦你有了JREPL.BAT,那么只需要下面的一个班轮。它会查找以C_INCLUDES
开头并且尚未以/
结尾的任何行,并将/
追加到任何匹配的行。
jrepl "^C_INCLUDES .*(?=.$)[^/]" "$&/" /f "Flags.txt" /o -
由于JREPL是批处理脚本,因此如果将命令放在另一个批处理脚本中,则必须使用call jrepl
。