[英]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.*)\\|\1/|
不過,我想知道是否有像第一個指令在一個正則表達式,即 s|^#include\\Z\\\\|/|g
其中\\Z
是我要找的修改。
編輯當然,我只會在#include指令上替換反斜杠。
s@\@/@g
在我的情況下不起作用
perl -pe'tr{\\}{/} if /^\s*#\s*include/'
某些文本被匹配兩次,但是數量很少。 替代方案(如在anubhava的答案中所示)相當混亂,可能最終不會比對某些文本進行兩次匹配更快。
此后,此方法的sed
版本已添加到anubhava的答案中,並且速度更快。
使用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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.