如何从变量中的字符串中只用一个“\ n”替换连续的“\ n”

时间:2013-06-16 02:00:20

标签: bash sed

(我将使用_而不是BLANK和\ n而不是换行来更好地描述情况:)

如果我执行

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

outpot就像:

THISISAWord
\n_
\n___
\n_
ANOTHERWORD
\n_
...
\n__
ANOTHERWORD
\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更高的内容转换为Text 不保存文件(女巫杀死性能),然后使用以下

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

非常感谢。

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

这应该做你想要的事情

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

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


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

答案 2 :(得分:0)

提出问题:

  

如何删除仅包含空白字符的行?

答案是

grep -E \\w

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

grep -E \\w | sed -r 's/ +$//g'

答案 3 :(得分:0)

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

grep。文件

找到here

手册页:

  

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

答案 4 :(得分:0)

    Kaizen ~/so_test $  cat ztempfile3.txt | nl | grep -v '\n' | tr '[0-9]' '\n'

    THISISAWord

    ANOTHERWORD

    ANOTHERWORD

只是在努力.....这有帮助吗?