我有一個用例添加屬性::字段名稱[0-9] [0-9]:但一些字段已經有屬性::, 所以我只需要添加attribtue ::至名_ [0-9] [0-9]:那不跟屬性::sed替代與負面看法正則表達式
我已經試過這樣:
sed -n 's/name_[0-9][0-9]:(?!attribute::)/&attribute::/p' out
我在網上正則表達式調試器測試正則表達式應該是我需要什麼,但實際上這不匹配,如果我給name_01:abc
我有一個用例添加屬性::字段名稱[0-9] [0-9]:但一些字段已經有屬性::, 所以我只需要添加attribtue ::至名_ [0-9] [0-9]:那不跟屬性::sed替代與負面看法正則表達式
我已經試過這樣:
sed -n 's/name_[0-9][0-9]:(?!attribute::)/&attribute::/p' out
我在網上正則表達式調試器測試正則表達式應該是我需要什麼,但實際上這不匹配,如果我給name_01:abc
「在線正則表達式調試器」通常不會告訴您他們測試哪種精確的正則表達式方言;如果他們告訴你,你需要知道你的sed
支持哪種方言。
您正在嘗試使用我知道的任何sed
開箱即用的Perl正則表達式功能,但當然,它在Perl中非常受支持。
perl -ne 's/name_[0-9][0-9]:(?!attribute::)/$&attribute::/ and print' out
是的,perl完美地解決了我的問題 – michael
$ cat file1
name_12:
name_34:attribute::
name_56:
$ sed '/:attribute::/n; s/name_[0-9][0-9]:/&attribute::/g' file1
name_12:attribute::
name_34:attribute::
name_56:attribute::
n
:閱讀下一行。
這不太精確,因爲它會在行中的任何位置查找':attribute ::'。 OP的問題看起來並不像這種情況那麼容易發生,但也許它應該被拼寫出來。 – tripleee
'sed'不使用PCRE,所以它沒有lookahead。 – Barmar
@Barmar無論如何要實現這一目標? – michael
如果您使用GNU'sed',我認爲您可以使用PCRE重新編譯它。去谷歌上查詢。 – Barmar