我一直在尝试将以下字符串转换为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("<", "<");
data = MyString.replaceAll(">", ">");
答案 0 :(得分:1)
在bash中,您可以使用模式替换。让我们从这个字符串开始:
$ s='<Name>'
而且,让我们做替换:
$ s="${s//</<}"
$ s="${s//>/>}"
$ echo "$s"
<Name>
Bash适用于globs。如果您需要正则表达式,请尝试使用sed:
$ s='<Name>'
$ echo "$s" | sed 's/</</g; s/>/>/g; s/<[^>]*>/<>/g'
<>
在一个更复杂的例子中:
$ MyStr='(<font color='whisper'>[ <name shortname='UserName' src='whisper-from'>UserName</name> whispers, "test" to you. ]</font>'
$ echo "$MyStr" | sed 's/</</g; s/>/>/g; s/<[^>]*>//g'
([ UserName whispers, "test" to you. ]
答案 1 :(得分:0)
单独使用sed
或自提及bash
后,在sed
脚本中使用bash
(例如b.sh
):
#!/bin/bash
sed 's/>/>/g' | sed 's/</</g' | sed 's/<.*?>//g'
输入数据(例如b.txt
文件):
asdasdasdds<.*?>dasdasassxrh
sadaswqqw<ssadasdasdsdvvxc
sadssadadsads>dsdsdewpppp
输出结果:
asdasdasddsdasdasassxrh
sadaswqqw<ssadasdasdsdvvxc
sadssadadsads>dsdsdewpppp
用法:
b.sh < b.txt
注意:如果您想要修改或添加更多格式更改,我会将每个全部替换为单独的sed
调用。