考虑以下命令及其结果:
$ echo "<br/> <br/>a<br/>b<br/>c<br/><br/> <br/>"|lynx -dump -stdin
a
b
c
$ echo "<br/> <br/>a<br/>b<br/>c<br/><br/> <br/>"|elinks -dump
a
b
c
两者都不会打印正确的行数:elinks
跳过第一个空白,并且都跳过空白行和仅包含空白的尾随行。
有没有办法强制lynx
或elinks
解释所有空格和换行符?我在他们的联机帮助页中没有看到任何明显的内容。
(我的意思是,除了使用显示后被sed
或或其他内容抑制的临时字符之外。)tr
答案1
Lynx 可以配置为使用以下命令修改此行为COLLAPSE_BR_TAGS在配置文件中,例如lynx.cfg:
如果
COLLAPSE_BR_TAGS
设置为 FALSE,Lynx 将不会折叠串行 BR 标签。如果设置为 TRUE,两个或多个并发 BR 将折叠为单个换行符。请注意,在 HTML 中插入额外空行的有效方法是通过 PRE 块,该块中仅包含换行符。默认值为
COLLAPSE_BR_TAGS
TRUE
答案2
Lynx v2.8.9(已发布2018 年 7 月 8 日)添加了trim_blank_lines
控制是否修剪空白行的选项。
将collapse_br_tags
和trim_blank_lines
选项设置为错误的1将保留空白行。
1 Lynx 识别“1”、“+”、“on”和“true”为真值,“0”、“-”、“off”和“false”为假值。
https://www.mankier.com/1/lynx
例子:
echo "<br/> <br/>a<br/>b<br/>c<br/><br/> <br/>d" \
| lynx -stdin -collapse_br_tags=0 -trim_blank_lines=0 -nomargins=1 -dump
结果:
a
b
c
d
不幸的是,您将得到虚假的尾随换行符,如上面的输出所示。
幸运的是,这很容易通过额外的修复来解决sed 管道阶段删除 EOF 处的多个换行符:
echo "<br/> <br/>a<br/>b<br/>c<br/><br/> <br/>d" \
| lynx -stdin -collapse_br_tags=0 -trim_blank_lines=0 -nomargins=1 -dump \
| sed ':loop; /^\n*$/{$d;N;}; /\n$/b loop'