2012-05-23 114 views

回答

3

這聽起來像你想解析XML與正則表達式,這通常是一個壞主意— XML複雜得多比它最初看起來可能(當您需要用<a b="c"></a>替換<a b="c"/>時會發生什麼? ?什麼非ASCII元素名稱)—但如果你確信你所描述的究竟是什麼,你需要什麼,然後你可以寫:

perl -pe 's{<(\w+)/>}{<$1></$1>}g' <input_file> output_file 

或:

sed 's|<\([^[:space:]][^[:space:]]*\)/>|<\1></\1>|g' <input_file> output_file 
+0

謝謝sed版本工作..我只刪除了'[:space:]'檢查...我也確定我需要編輯的文件只有''或''標籤... – Marcx

0

正則表達式以匹配您的標籤將是:

<(\w+)/> 

通過使用t他捕獲組,您可以創建新的標籤是這樣的:

<\1></\1> 
0

這可能會爲你工作:

echo '<book/>' | sed 's|<\([^/]*\)/>|<\1></\1>|' 
<book></book> 
+0

謝謝!但我不需要一個定義的詞.. :) – Marcx

+0

我不明白。這適用於任何標籤,而不僅僅是「書」。 – potong

1

使用

sed -i 's|<\([[:alpha:]][[:alpha:]]*\)/>|<\1></\1>|g' $input_file 

在線更改文件(這就是-i的用途)。小心:-i是一個GNU擴展。

符合POSIX標準和編輯文件內聯(任何* IX系統),使用此:

echo '/<[[:alpha:]][[:alpha:]]*\/>/g\ 
s/<\([[:alpha:]][[:alpha:]]*\)\/>/<\1><\/\1>/g 
wq' | ed $input_file 

查看seded,並且regular expressions POSIX標準。