Linuxでは、sedコマンドを使用して各行の最後の単語を印刷できますか?

Linuxでは、sedコマンドを使用して各行の最後の単語を印刷できますか?

次の行で構成されるファイルがあるとします。

12345567 7878 66

   語3 t45t y6y46y


 4年6年656年y5年

   46y6 65y7 y66uyuy

 yy46y6y

出力は次のようになります。

66

y6y46y

y5y

y66uyuyy

y46y6y

sed 's/.* //g'filenameコマンドとは異なる複数のコマンドを試しましたが、sed機能しません。

正確な命令が何であるかがわかりますかsed

答え1

あなたは試すことができます:

  • sed 's/.* //'
  • awk '{print $NF}'

ファイルにスペースで終わる行がある場合は、あらかじめ対応する末尾のスペースを削除できますsed 's/ +$//'。これら2つの操作を1行にまとめることができます。

  • sed -e 's/ +$//' -e 's/.* //'

答え2

awk '{print $NF}'
sed 's/[[:blank:]]*$//;s/.*[[:blank:]]//'

awkこれはまだ空白行ごとに空白行を印刷します(as演算子を含む行全体は$0に適用され、完全なレコードを生成します)。これを防ぐには:

awk 'NF{print $NF}'
sed 's/[[:blank:]]*$//;s/.*[[:blank:]]//;/./!d'

答え3

変数awk$NF各レコードの最後のフィールド;これにより、次のようにファイルの最後のフィールドのみを印刷できます。

awk '{print $NF}' file

答え4

grep代わりに、次の適切なパターンを使用できますsed

grep -o "[a-Z0-9]*$"

この例には、[...]「単語」に適していると見なされる文字範囲が含まれています(この場合は英数字、追加の記号を追加でき、その一部はエスケープする必要があります)。

関連情報