29

別のコマンドの出力である文字列があります。この文字列の末尾のみを表示する必要があります。区切り文字列は " ." (ドットとスペース) で、" ." の最後のインデックスの後の文字列が必要です。

Bashでこれを行うにはどうすればよいですか?

4

4 に答える 4

40

文字列が変数にある場合:

$ foo="header. stuff. more stuff"
$ echo "${foo##*. }"
more stuff

". " のインスタンスが複数あり (私の例のように) 、最後ではなく最初#に出現した後のすべてが必要な場合は、 one を使用します。

$ echo "${foo#*. }"
stuff. more stuff
于 2013-03-21T13:15:36.727 に答える
31

これを試して:

your cmd...|sed 's/.*\. //'

これは、入力に「ドット」または「ドットとスペース」がいくつあっても機能します。最後の「ドットとスペース」の後の文字列を取ります

于 2013-03-21T13:04:10.620 に答える
9

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 人が、私たちが取り組んでいる何かのために今日このページを指摘してくれたので、他の人も見ている場合に備えて、ここにドロップすると思いました。)

于 2016-05-04T17:34:59.430 に答える
7

これを試して:

echo "This is a sentence. This is another sentence" | rev | cut -d "." -f1 | rev

rev出力を反転します。は-dデリミタを指定し、すべてをフィールドに分割します。は -f、使用するフィールドを指定します。データを反転したので、f1 を選択できます。合計でいくつのフィールドがあるかを知る必要はありません。最初に知る必要があるだけです。最後に、もう一度逆にして、正しい順序に戻します。

于 2013-03-21T13:04:49.147 に答える