unix tr 查找和替换
这是我在从网站 wget
的标准网页上使用的命令。
tr '<' '\n<' < index.html
然而它给了我换行符,但没有再次添加左侧的中断。 例如
echo "<hello><world>" | tr '<' '\n<' | cat -e
返回
$
hello>$
world>$
而不是
$
<hello>$
<world>$
What's bad?
This is the command I'm using on a standard web page I wget
from a web site.
tr '<' '\n<' < index.html
however it giving me newlines, but not adding the left broket in again.
e.g.
echo "<hello><world>" | tr '<' '\n<' | cat -e
returns
$
hello>$
world>$
instead of
$
<hello>$
<world>$
What's wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这是因为
tr
只进行逐个字符的替换(或删除)。尝试使用
sed
来代替。或者
awk
。或者perl。
或者红宝石。
或者
python
。That's because
tr
only does character-for-character substitution (or deletion).Try
sed
instead.Or
awk
.Or
perl
.Or
ruby
.Or
python
.如果您有 GNU grep,这可能对您有用:
它应该穿过所有 HTML,但每个标签应该从行的开头开始,同一行上可能有非标签文本。
如果你只想要标签:
但是,你应该知道它是 不是使用正则表达式解析 HTML 是个好主意。
If you have GNU
grep
, this may work for you:which should pass through all of the HTML, but each tag should start at the beginning of the line with possible non-tag text following on the same line.
If you want nothing but tags:
You should know, however, that it's not a good idea to parse HTML with regexes.
放置换行符的顺序很重要。你也可以逃避“<”。
也有效。
The order of where you put your newline is important. Also you can escape the "<".
works as well.
这对你有用吗?
您可以在
awk
{}
操作前面放置一个正则表达式 //(您希望发生这种情况的行)。Does this work for you?
You can put a regex / / (lines you want this to happen for) in front of the
awk
{}
action.