在bash脚本中使字符串更加用户友好/可读

时间:2016-08-21 19:15:20

标签: 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;", ">");

2 个答案:

答案 0 :(得分:1)

在bash中,您可以使用模式替换。让我们从这个字符串开始:

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

而且,让我们做替换:

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

Bash适用于globs。如果您需要正则表达式,请尝试使用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. ]

答案 1 :(得分:0)

单独使用sed或自提及bash后,在sed脚本中使用bash(例如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调用。