如何在所有 #include "...\..." 中用正斜杠替换反斜杠
How to replace backslashes with forward slashes in all #include "...\..."
我想知道是否可以在文件中替换如下语句:
#include "foo\bar\something\else"
#include "..\..\foo.h"
和
#include "foo/bar/something/else"
#include "../../foo.h"
我可以多次使用 Perl pie 或 sed:
s|(\#include.*)\|/|
但我想知道正则表达式中是否有类似于第一个指令的东西 即 s|^#include\Z\|/|g
其中 \Z
是我正在寻找的修饰符对于.
编辑
当然,我只会替换#include 指令中的反斜杠。
s@\@/@g
不适用于我的情况
使用perl
:
perl -pe 's~(?:#include|(?!^)\G)[^\]*\K\~/~g' file
#include "foo/bar/something/else"
#include "../../foo.h"
使用sed
:
sed '/#include/s~\~/~g' file
#include "foo/bar/something/else"
#include "../../foo.h"
或者如果您想用 /
替换所有 \
然后使用 tr
:
tr '\' "/" < file
#include "foo/bar/something/else"
#include "../../foo.h"
你可以使用 sed
sed 's|\|/||g' file
#include "foo\bar\something\else"
#include "..\..\foo.h"
仅替换 #include
行
sed '/#include/s|\|/|g' file
#include "foo/bar/something/else"
#include "../../foo.h"
awk '/^#include/ {gsub(/\/,"/")}1' file
#include "foo/bar/something/else"
#include "../../foo.h"
perl -pe'tr{\}{/} if /^\s*#\s*include/'
部分文字匹配了两次,但数量很少。替代方案(如 anubhava 的回答所示)相当混乱,最终可能不会比匹配某些文本两次更快。
此方法的 sed
版本已添加到 anubhava 的答案中,而且速度更快。
我想知道是否可以在文件中替换如下语句:
#include "foo\bar\something\else"
#include "..\..\foo.h"
和
#include "foo/bar/something/else"
#include "../../foo.h"
我可以多次使用 Perl pie 或 sed:
s|(\#include.*)\|/|
但我想知道正则表达式中是否有类似于第一个指令的东西 即 s|^#include\Z\|/|g
其中 \Z
是我正在寻找的修饰符对于.
编辑 当然,我只会替换#include 指令中的反斜杠。
s@\@/@g
不适用于我的情况
使用perl
:
perl -pe 's~(?:#include|(?!^)\G)[^\]*\K\~/~g' file
#include "foo/bar/something/else"
#include "../../foo.h"
使用sed
:
sed '/#include/s~\~/~g' file
#include "foo/bar/something/else"
#include "../../foo.h"
或者如果您想用 /
替换所有 \
然后使用 tr
:
tr '\' "/" < file
#include "foo/bar/something/else"
#include "../../foo.h"
你可以使用 sed
sed 's|\|/||g' file
#include "foo\bar\something\else"
#include "..\..\foo.h"
仅替换 #include
sed '/#include/s|\|/|g' file
#include "foo/bar/something/else"
#include "../../foo.h"
awk '/^#include/ {gsub(/\/,"/")}1' file
#include "foo/bar/something/else"
#include "../../foo.h"
perl -pe'tr{\}{/} if /^\s*#\s*include/'
部分文字匹配了两次,但数量很少。替代方案(如 anubhava 的回答所示)相当混乱,最终可能不会比匹配某些文本两次更快。
此方法的 sed
版本已添加到 anubhava 的答案中,而且速度更快。