2013-05-05 29 views
5

sed one-linerを使用して各段落の最初の単語のみをどのように印刷することができますか?この場合の段落は、2行の改行に続くテキストで定義されます。sedを使用して各段落の最初の単語のみを印刷します

This is a paragraph with some text. Some random text that is not really important. 

This is another paragraph with some text. 
However this sentence is still in the same paragraph. 

これは

This 

This 

答えて

2

可能GNU sedソリューションは次のようになります。

sed -rn ':a;/^ *$/{n;ba};s/(|$).*//p;:b;n;/^ *$/ba;bb' 

出力:

This 
This 

空白のみの行を空として扱い、段落間の空白行をいくつでも理解します。 1単語の段落も正しく処理します。

7

に変換する必要がありますが paragraph mode

 
By a special dispensation, an empty string as the value of RS indicates that 
records are separated by one or more blank lines. 

awkまたはperl '段落モード' をサポートしているし、どちらかがsedより良い選択になるだろうと思います。

awk '{ print $1 }' RS= ORS="\n\n" file 

または

perl -00 -lane 'print $F[0]' file 

結果:

This 

This 
+0

ただ、サイドノート、あなたはレコードセパレータを望んでいた場合は、のために、 '、2つの改行を_exactly_' RSを使用= "\ N \ N" します'awk'。 cmd行で 'perl'でそれを行う方法を覚えていません。他の誰かが知っているだろうか? – Steve

+0

シンプルなので、明らかに.... +1もちろん。 –

0

これはあなたのために働くかもしれない(GNUのSED):

sed ':a;$!{N;/\n\s*$/!ba};s/\s.*/\n/' file 
関連する問題