2013-11-22 17 views
2

我有一個字符串,看起來像這樣。正則表達式替換屬性名稱中的連字符只有

<tag-name i-am-an-attribute="123" and-me-too="321"> 

所有我想要做的就是更換破折號爲下劃線,但標籤名稱應保持像它。

希望有一些正則表達式的大師可以幫助我。

[解決] 萬一有人需要這個。
我結束了oneliner命令
echo '<tag-name i-am-an-attribute="123" and-me-too="321">' | perl -pe 's/(\K[^*"]*)-/$1_/g;' | perl -pe 's///g;'
結果

<tag-name i_am_an_attribute="123" and_me_too="321"> 
+0

你使用哪種語言? –

+0

命令行sed – user3022139

+0

Sed沒有前瞻/後向支持,這意味着這很可能是不可能的。 – OGHaza

回答

1

使用SED一個Perl:

sed ':l;s/-\([^- ]*\)\(*=\)/_\1\2/g;tl' input 

給出:

<tag-name i_am_an_attribute="123" and_me_too="321"> 
+0

你先生真棒:) – user3022139

0

隨着<標籤名稱I-AM-的屬性= 「123」 和我太= 「321」 >在一個文件中的行: -

read -r < file 

fullstring=$(echo "${REPLY}" | sed s'@-name @-name:@') 

field1=$(echo "${fullstring}" | cut -d':' f1) 
field2=$(echo "${fullstring}" | cut -d':' f2) 

fixedfield=$(echo "${field2}" | sed s'@[email protected][email protected]'g) 

echo "${field1} ${fixedfield}" 

我發現,最重要的事情,使用腳本,就是在文本中提供自己的錨點,您可以使用它將其剪切成可以執行操作的段。嘗試使用分隔符將文本格式化爲實際字段;它使生活變得更容易。