簡體   English   中英

如何在所有#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.*)\\|\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM