翻转括号

Mic*_*sky 4 text-editors

我有一些带翻转括号的文本。例如,而不是(text-in-parentheses)我有)text-in-parentheses(

有没有一种简单的方法可以翻转文本中的所有括号?如果是这样,如何?

更新:这是一个纯文本文件,每个括号都被翻转。我正在使用 Windows 7。

Com*_*eek 6

电源外壳

简短版本

(Get-Content "in.txt" -raw) -replace "\(", "`0)" -replace "\)", "(" -replace "(`0\()", ")" >> "out.txt"
Run Code Online (Sandbox Code Playgroud)

也可以:

Set-Content "out.txt" ((Get-Content "in.txt" -raw) -replace "\(", "`0)" -replace "\)", "(" -replace "(`0\()", ")")
Run Code Online (Sandbox Code Playgroud)
  • 读取 in.txt
  • 写入out.txt(在第一个代码示例中水平滚动以查看行尾)

长版本

$in = "in.txt";
$out = "out.txt";

(Get-Content $in -raw) -replace "\(", "`0)" -replace "\)", "(" -replace "(`0\()", ")" >> $out
Run Code Online (Sandbox Code Playgroud)

也可以:

Set-Content $out ((Get-Content $in -raw) -replace "\(", "`0)" -replace "\)", "(" -replace "(`0\()", ")")
Run Code Online (Sandbox Code Playgroud)

解释

请暂时忽略神秘的反斜杠 - 它们仅适用于转义在正则表达式中具有特殊含义的括号。

我们首先替换每次出现的(by NUL)(参见NUL 字符)。然后,我们将每个替换)(。作为最后一步,NUL(由 重新替换)

使用这种方式,我们确保不会进行“双重替换”,例如:

Initial string value:
(test)

After replacing "(" by ")"
)test)

After replacing ")" by "("
(test(
Run Code Online (Sandbox Code Playgroud)

警告

文件本身不能包含序列NUL)。这会导致对我的 Powershell 脚本的误解,因为我将 NUL 字符用作特殊指示符(例如,在使用绿色屏幕和穿着绿色衣服时会出现相同的情况)。