別のコマンドの出力である文字列があります。この文字列の末尾のみを表示する必要があります。区切り文字列は " .
" (ドットとスペース) で、" .
" の最後のインデックスの後の文字列が必要です。
Bashでこれを行うにはどうすればよいですか?
文字列が変数にある場合:
$ foo="header. stuff. more stuff"
$ echo "${foo##*. }"
more stuff
". " のインスタンスが複数あり (私の例のように) 、最後ではなく最初#
に出現した後のすべてが必要な場合は、 one を使用します。
$ echo "${foo#*. }"
stuff. more stuff
これを試して:
your cmd...|sed 's/.*\. //'
これは、入力に「ドット」または「ドットとスペース」がいくつあっても機能します。最後の「ドットとスペース」の後の文字列を取ります
Awk は洗練された武器です...より文明化された時代のために:
[cpetro01@h ~]$ echo "this. is. my. string. of. some. arbitrary. length" | awk -F'. ' ' { print $NF } '
length
[cpetro01@h ~]$ echo "this. is. my. string. of. some" | awk -F'. ' ' { print $NF } '
some
この場合、NF は「フィールド数」の awk 変数であり、この構造は「見つかった最大数のフィールドのエントリを出力する」ことを示しているため、入力のサイズがある行から次の行に変更された場合でも、取得しようとしている最後のもの。
数学を行うこともできます:
[cpetro01@h~]$ echo "this. is. my. string. of. some. arbitrary. length" | awk -F'. ' ' { print $(NF-2) } '
some
[cpetro01@h~]$ echo "this. is. my. string. of. some. arbitrary. length" | awk -F'. ' ' { print $(NF-3) } '
of
[cpetro01@h~]$
(はい、これは OP から 3 年遅れていますが、私のカウコーカーの 1 人が、私たちが取り組んでいる何かのために今日このページを指摘してくれたので、他の人も見ている場合に備えて、ここにドロップすると思いました。)
これを試して:
echo "This is a sentence. This is another sentence" | rev | cut -d "." -f1 | rev
はrev
出力を反転します。は-d
デリミタを指定し、すべてをフィールドに分割します。は -f
、使用するフィールドを指定します。データを反転したので、f1 を選択できます。合計でいくつのフィールドがあるかを知る必要はありません。最初に知る必要があるだけです。最後に、もう一度逆にして、正しい順序に戻します。