如何在一行的開頭使用通配符? 例如,我想用def
替換abc
。perl中一行的通配符開頭
這是我的文件看起來像
abc
abc
abc
hg abc
現在我想的是abc
應僅在前3行更換。怎麼做?
$_ =~ s/['\s'] * abc ['\s'] * /def/g;
在第一空間開始之前放置什麼條件?
感謝
如何在一行的開頭使用通配符? 例如,我想用def
替換abc
。perl中一行的通配符開頭
這是我的文件看起來像
abc
abc
abc
hg abc
現在我想的是abc
應僅在前3行更換。怎麼做?
$_ =~ s/['\s'] * abc ['\s'] * /def/g;
在第一空間開始之前放置什麼條件?
感謝
試試這個:
$_ =~ s/^['\s'] * abc ['\s'] * /def/g;
如果需要,從一排開始檢查,然後使用^
。
此外,我不知道爲什麼你有'
和空格在你的正則表達式。在行
開始>零或morespaces這將嚴格用高清代替ABC -
s/(^ *)abc/$1def/g
(^ *)
:這也應該爲你工作:
$_ =~ s/^[\s]*abc[\s]*/def/g;
使用^
字符,並刪除不必要的撇號,空格和[
]
:
$_ =~ s/^\s*abc/def/g
如果你想保留那名 「ABC」 之前那些空間:
$_ =~ s/^(\s*)abc/\1def/g
您正在你的正則表達式中的一些錯誤
$_ =~ s/['\s'] * abc ['\s'] * /def/g;
/g
(全局,匹配儘可能多的次數)。/x
改性劑的所有字符都是文字除了]
,-
和^
,所以['\s']
手段「匹配空格或撇號'
」的正則表達式內\s*
表示「零個或多個空格」,但\s *
的意思是「只有一個空格,後面跟零個或多個空格」。再次,除非使用/x
。$_ =~
,因爲除非另有說明,否則這是任何正則表達式使用的變量。如果您要更換abc
,只有abc
當它是第一個非空白在一條線上,你可以這樣做:
s/^\s*\Kabc/def/
爲\K
(保持)逃生另一種是捕捉到,如果你想保留空白目標字符串abc
下放回
s/^(\s*)abc/$1def/
,你不需要做任何事情。如果你想刪除它,只是在最後
s/^\s*\Kabc\s*/def/
添加\s*
另外請注意,這僅僅是凝結邏輯到一個語句的方式。您也可以通過非常簡單的積木達到相同的:
if (/^\s*abc/) { # if abc is the first non-whitespace
s/abc/def/; # ...substitute it
}
因爲(如果不使用/g
改性劑)的替代只會發生一次,只有第一場比賽受到影響,這將完美替代abc
爲def
。
可以請您像輸出一樣顯示嗎? – user1811486
請注意'\ s'不僅僅是空格,還有其他字符。 – m0skit0