1

(BLANK の代わりに _ を使用し、改行の代わりに \n を使用して、状況をより適切に説明します:)

私が実行すると

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

アウトポットは次のようなものです:

THISISA言葉
\n_
\n___
\n_
アナザーワード
\n_
...
\n__
アナザーワード
\n
\n
\n__
\n_

変数内の文字列から連続\n \n \n \nて 1 つだけを置き換えるにはどうすればよいですか? \n連続する改行をひとつにまとめたい。私が取得したいのは次のようなものです:

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///

行に少なくとも 1 つの空白以外の文字が含まれている場合は、その行の末尾に改行を追加します。それ以外の場合 (改行やスペースなどの空白文字のみを含む行)、それらを無視します。


sed 's/\n//g'sed改行をレコード区切りとして使用するため、機能しません。line1\nline2\nline3そのため、ファイルをetc と見なす代わりにline1line2line3などと見なします。

于 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 に答える