1

(我将使用 _ 代替 BLANK 和 \n 代替换行符来更好地描述这种情况:)

如果我执行

str_text=`vilistextum -u -p - - <<< "$str_html"`;
printf "$str_text"

前哨是这样的:

THISISAWord
\n_
\n___
\n_
另一个词
\n_
...
\n__
另一个词
\n
\n
\n__
\n_

如何从变量中的字符串中替换连续的\n \n \n \n只有一个?\n我想将连续的 NEWLINES 压缩为一个。我想得到的是这样的:

THISISAWord
\n
ANOTHERWORD
\n
ANOTHERWORD

我尝试了类似的东西

str_text=`vilistextum -u -p - - <<< "$str_html"  | sed 's/\n//g'`;

但是 sed 并没有像我想象的那样工作。

==== 解决方案 ====

如果您想将高于 HTML 3.2 的内容转换为文本而不保存在文件中(女巫会杀死性能),请使用以下内容

str_text=$(vilistextum - - <<< "$str_html");
str_text=$(awk 'NF{print $0}' ORS='\n' <<< "$str_text");
str_text=$(sed 's/\\n//g' <<< "$str_text" );

非常感谢。

4

5 回答 5

1

awk可以尝试以下方法:

awk 'NF{print $0}' ORS='\n\n' <<< "$str_text"

测试:

$ cat -vet <<< "$str_text"
$
THISISAWORD$
   $
      $
 $
$
ANOTHERWORD$
$
  $
 $
ANOTHERWORD$
    $
 $
$
$
$ awk 'NF{print $0}' ORS='\n\n' <<< "$str_text"
THISISAWORD

ANOTHERWORD

ANOTHERWORD

所以你可以这样做:

$ str_text=$(awk 'NF{print $0}' ORS='\n\n' <<< "$str_text")
$ echo "$str_text"
THISISAWORD

ANOTHERWORD

ANOTHERWORD
于 2013-06-16T02:17:44.283 回答
1

这应该做你想做的

cmd | sed -n 's/.*[^[:space:]].*/&\n/p'
  • -n开关关闭默认的每行打印行为。
  • s/../../p说打印发生替换的那些行。
  • &包含匹配左侧整个模式的字符串s///

如果一行至少包含一个非空白字符,则在该行的末尾添加一个换行符。否则(仅包含空格字符的行,如换行符和空格),忽略它们。


sed 's/\n//g'不起作用,因为sed使用换行符作为记录分隔符。因此,它不会将文件视为line1\nline2\nline3等,而是将其视为line1,line2line3

于 2013-06-16T03:43:55.067 回答
0

把你的问题变成:

如何删除只有空白字符的行?

答案是

grep -E \\w

如果您还想删除非空行中的尾随空格:

grep -E \\w | sed -r 's/ +$//g'
于 2013-06-16T02:08:10.757 回答
0
    Kaizen ~/so_test $  cat ztempfile3.txt | nl | grep -v '\n' | tr '[0-9]' '\n'

    THISISAWord

    ANOTHERWORD

    ANOTHERWORD

只是在尝试……这有帮助吗?

于 2013-06-16T07:31:54.713 回答
0

仅查看包含某些内容的行:

grep 文件

这里找到

手册页:

句点 (.) 在括号表达式之外使用时,是一个基本的正则表达式,它匹配任何可打印或不可打印字符,除了

于 2013-06-16T02:30:54.013 回答