2016-08-21 5 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エンティティのレンダリングを防ぐために文字列をインデントしましたが、その編集のほとんどを元に戻しました。コードを4つのインデントでインデントする必要があります。 –

答えて

1

bashでは、パターン置換を使用できます。

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

そして、のは、それに置換を行いましょう:この文字列で始まるのをしてみましょう

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

バッシュはグロブで動作します。使用sedは、それ自体で

$ 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

か、あなたはbashを述べたことから、例えば(bashスクリプト内sedを使用b.sh:より複雑な例では

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

を:あなたは正規表現が必要な場合は、sedをしてみてください):

#!/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呼び出しに置き換える破りました。

関連する問題