2016-08-21 30 views
-1

我一直試圖將下面的字符串轉換爲bash腳本中更具可讀性和可用性的表單。某些部分不是靜態的。使字符串在bash腳本中更加用戶友好/可讀

(<font color='whisper'>[ <name shortname='UserName' src='whisper-from'>UserName</name> whispers, "test" to you. ]</font> 

很多東西其實都不是靜態的。基本上,我想最終的結果看起來像:

([UserName whispers, "test" to you. ] 

我已經在Java,PHP,甚至VB6做了一次又一次。不過,我對bash腳本是新手,似乎無法使其工作。

有人能幫我把這個Java代碼轉換成bash腳本嗎?

data = MyString.replaceAll("<.*?>", ""); 
data = MyString.replaceAll("&lt;", "<"); 
data = MyString.replaceAll("&gt;", ">"); 
+1

我很確定你的字符串格式已被堆棧溢出編輯器搞亂了。我縮進了字符串以防止呈現HTML實體,但是您剛剛取消了大部分編輯操作......您必須將您的代碼縮進四個空格。 –

回答

1

在bash中,您可以使用模式替換。讓我們先從這個字符串:

$ s='&lt;Name&gt;' 

而且,讓我們做它的置換:

$ s="${s//&lt;/<}" 
$ s="${s//&gt;/>}" 
$ echo "$s" 
<Name> 

猛砸適用於水珠。如果您需要正則表達式,嘗試SED:

$ s='&lt;Name&gt;' 
$ echo "$s" | sed 's/&lt;/</g; s/&gt;/>/g; s/<[^>]*>/<>/g' 
<> 

在一個更復雜的例子:

$ MyStr='(<font color='whisper'>[ <name shortname='UserName' src='whisper-from'>UserName</name> whispers, "test" to you. ]</font>' 
$ echo "$MyStr" | sed 's/&lt;/</g; s/&gt;/>/g; s/<[^>]*>//g' 
([ UserName whispers, "test" to you. ] 
+0

複雜的例子似乎正如我所需要的那樣工作。我正在看sed,但只是無法圍繞如何在bash中執行正則表達式。謝謝! – user1305988

0

使用sed本身或,因爲你提到bash,一個bash腳本中使用sed(例如b.sh ):

#!/bin/bash 
sed 's/&gt;/>/g' | sed 's/&lt;/</g' | sed 's/<.*?>//g' 

輸入數據(例如b.txt文件):

asdasdasdds<.*?>dasdasassxrh 
sadaswqqw&lt;ssadasdasdsdvvxc 
sadssadadsads&gt;dsdsdewpppp 

輸出結果:

asdasdasddsdasdasassxrh 
sadaswqqw<ssadasdasdsdvvxc 
sadssadadsads>dsdsdewpppp 

用法:

b.sh < b.txt 

注:我打破了每更換所有進入的情況下,你想修改或添加更多的格式更改單獨sed電話。