
我有一個這樣的文件
KN1234.1
KN2345.1
KN1233.1
我想更換 .與 v 以便我可以得到輸出
KN1234v1
KN2345v1
KN1233v1
之後 。它總是 1,但在 KN 之後我也可以有最多 5 位數字。像這樣的事情也是可能的KN14345.1
,它的輸出應該是KN14345v1
我嘗試過 sed 指令
sed 's/KN\d+.1/KN\d+v1/g' file.txt
但什麼事也沒發生。我怎樣才能解決這個問題?
Perl 解決方案也將受到讚賞。
謝謝
答案1
這:
sed 's/KN\d+.1/KN\d+v1/g' file.txt
不執行任何操作,因為您的 sed 不太可能支援\d
(我認為它來自 Perl),因此模式不匹配任何內容。你可能想參考這個:為什麼我的正規表示式在 X 中有效但在 Y 中無效?
無論如何,它不會按您想要的方式工作,因為它只是在替換部分中\d
轉義,並且並不特殊,因此您的數字會被替換。d
+
在 Perl 中,你可能想要這樣的東西:
perl -pe 's/(KN\d+)\.1/$1v1/' file.txt
其中$1
擴展到括號中的第一組,並且點被轉義,因為它是正則表達式任何字元。或者
perl -pe 's/KN\d+\K\.1/v1/' file.txt
where\K
殺死匹配的前面部分,以便它不會被替換。
不過,如果您不關心點的上下文,請使用tr
. (或tr///
在 Perl 中)。