
テキストファイルがありますが、各単語(複数の文字)を新しい行に印刷したいと思います。単語が単一文字で構成されている場合は、次の単語の一部として扱われ、新しい行に印刷する必要があります。 2つの単語の間にある場合は、2番目の単語の後に来る必要があります。例:
Unix & Linux Stack Exchange is a question and answer site for users of Linux,
出力
Unix
& Linux
Stack
Exchange
is
a question
and
answer
site
for
users
of
Linux
答え1
どうですか?
sed -r 's/([^ ]{2,}) /\1\n/g' file
Unix
& Linux
Stack
Exchange
is
a question
and
answer
site
for
users
of
Linux,
スペースの前にスペース以外の2つ以上の文字パターンがあることを確認し、それを「逆参照」パターンと文字<LF>
に置き換えます。
答え2
ここではPerlスタイルの正規表現を使用します。
$ echo "$s" | grep -Po '((^|\s)\K\S\s+)?\S{2,}'
Unix
& Linux
Stack
Exchange
is
a question
and
answer
site
for
users
of
Linux,
拡張正規表現を使用して同じことを実行できますが、PCREのツアーがないため、最終的に先行スペースが発生します。
$ echo "$s" | grep -Eo '((^|[[:blank:]])[^[:blank:]][[:blank:]]+)?[^[:blank:]]{2,}'
Unix
& Linux
Stack
Exchange
is
a question
and
answer
site
for
users
of
Linux,
1文字の単語の前に単語の境界マークを追加したいが、&
単語の文字ではないので、単語の境界は有用ではありません。