簡體   English   中英

用反斜杠替換路徑中的所有正斜杠(因此,不是所有的正斜杠)

[英]Replace all forward slashes that are in paths, with backslash (so, not all forward slashes)

我有一個文件,文件路徑如下

c:/squid/etc/digpass
c:/squid/var/cache
c:/squid/var/logs/access
c:/squid/libexec/logfile
c:/squid/var/logs/cache

我想將/更改為\\

最好使用sed,但如果需要,則使用perl。 或兩者都很好。

我不能僅僅用\\替換/ ,因為存在無辜的/ (即/應該保留, /不屬於任何路徑)。

路徑與正則表達式模式c:/(\\w|/)*匹配

在網址中有/情況,例如http://或帶有“ apples / oranges”的注釋。

所以我只想替換所有c:/ .....路徑內的/。

我怎樣才能做到這一點?

最好在sed中使用,但如果使用perl,則可以。 如果兩者都很棒。

添加
響應fedorqui,以獲取更多示例數據..和預期的輸出以及我嘗試過的

#   This is the default Squid configuration file. You may wish
#   to look at the Squid home page (http://www.squid-cache.org/)
...
#  include /path/to/included/file/squid.acl.config
#
#  Includes can be nested up to a hard-coded depth of 16 levels.
...
#   auth_param basic program c:/squid/libexec/ncsa_auth c:/squid/etc/passwd
...
access_log c:/squid/var/logs/access.log squid
..

我只想將c:/路徑改寫為\\

至於我嘗試過的。 我嘗試了一個正則表達式來匹配路徑

C:\squid\etc>grep -ioP "C:/(\w|/)*" squid.conf
c:/squid/libexec/ncsa_auth
c:/squid/etc/passwd
c:/squid/libexec/digest_auth_pw
......

C:\squid\etc>grep -ioP "C:/(\w|/)*" squid.conf | wc -l
20

我嘗試了

sed C:\\squid\\etc>sed -ir "s#c:/(\\w|/)*#" squid2.conf

但是我可以看到它永遠都行不通。 我曾想過可能在/周圍捕獲,但是路徑是可變的,如您從我的正則表達式中所見,該路徑與路徑“ C:/(\\ w | /)*”匹配,而且我不能真正在此處捕獲正斜線。 所以我不太明白如何去做。

您可以進行就地文件編輯,

perl -pe 's!(c:\S+)! ($x=$1) =~ y|/|\\|; $x !egi'

可能存在更好的解決方案,但是嘗試下一個:

perl -i.bak -pe '1 while(s!c:\S*?\K/!\\!)' files...

在上面的c:/some/path不應包含空格。 對於c:/some path/here將不起作用。

選擇,如果可以包含空格,但不能: (例如像HTTP://)

perl -pe '1 while(s!c:[^:]*?\K/!\\!)'

這將更改帶有空格的路徑,但會保留URL

some "c:/some path/here" and http://some/url

附:我想看一些更正確的解決方案,例如,在哪里做的更好,猜測什么是路徑,什么不是。

這也應該工作:

perl -pe 's~(?:\G(?!\A)|\bc:)[^\s/]*\K/~\\~gi'

\\G是在上一個比賽結束時匹配的錨。 但是由於該錨也可以匹配字符串的開頭,因此必須通過添加(?!\\A)來禁止這種情況

因此,該模式中有兩個可能的入口點:

  • 上一場比賽的結束(這使得必須進行連續比賽)
  • \\bc:這是目標路徑的開始

注意:使用第一個字符識別優化可以以更有效的方式編寫此模式:

perl -pe 's~/(?:(?<=\G/)|(?<=\bc:/))([^\s/]*)~\\$1~gi' 

鏈接到regexstorm.net

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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