我想替换所有出现的" exp(...)"与" Exp [...]"在下面(基本上从Matlab改为Mathematica语法):
exp(-(pi*k2*2i)/3)*(v9/4 + (3^(1/2)*(v8/2 + (3^(1/2)*v9)/2))/2 + (3^(1/2)*v8)/12) + exp((pi*k2*2i)/3)*(v9/4 + (3^(1/2)*(v8/2 + (3^(1/2)*v9)/2))/2 + (3^(1/2)*v8)/12) ...
是否可以使用vim,sed或awk自动执行此操作?诀窍不是取代所有"("用" [",只有那些在exp之后立即出现的那些和相应的对。
答案 0 :(得分:9)
您可以使用10e32
宏执行此操作。
按<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
</style>
</head>
<body>
<script>
var context = new AudioContext();
function loadSound(url) {
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.responseType = "arraybuffer";
request.onload = function() {
data = new Uint8Array(request.response);
var buffer = context.createBuffer(1, data.length, 24000);
var channelData = buffer.getChannelData(0);
for (var i = 0; i < data.length; i++) {
channelData[i] = data[i];
}
var source = context.createBufferSource();
source.buffer = buffer;
source.connect(context.destination);
source.start(0);
}
request.send();
}
loadSound('./test.wav');
</script>
</body>
</html>
清除vim
注册表。 (如果记录了任何先前的操作,我们可以清除它们)
按a
启动宏录制。
键入qaq
搜索qa
。这会将光标置于exp(
。
按/exp(/e
移至关闭括号。按(
将其替换为%
。
现在,按r]
移至]
。按N
将其替换为exp(
。按r[
以递归方式替换所有此类实例。按[
停止录制。
现在,您可以按@a
播放宏,它将在任何地方替换。
答案 1 :(得分:0)
在下面的sed脚本(brackreplace)中,我们是:
exp(
→Exp§
(...)
→«...»
(如果内部没有"()§"
)Exp§...)
→Exp[...]
#!/bin/sed -zf
s/exp(/Exp§/g # (1) protect exp( → Exp§
s/(\([^()§]*\))/«\1»/g # (2) hide balanced (...) → «...»
s/Exp§\([^()§]*\))/Exp[\1]/g # (3) Exp§...) → Exp[...]
s/«/(/g # restore protected parentesis
s/»/)/g
这涵盖了你的榜样;如果你期望exp(...)中有更深的(),请重复第(2)行。
在chmod
之后,可以在命令行或编辑器内使用此命令。 vim示例:
:%!bracketreplace
答案 2 :(得分:0)
就像Sibi的答案一样,但只是一个微妙的变化,你应该使用``跳回到匹配的括号而不是N
。否则它不适用于这种模式:exp(...exp(...))