特定の値(-)を使用して文字列を削除する

特定の値(-)を使用して文字列を削除する

次のテキストがあります。

foo-11.11-fo.o-foo-bar

バー-フー-11.11-22.11

2つの "-"を持つ最後の文字列を削除したいと思います。

予想出力:

foo-11.11-fo.o

バー金持ち

Cutを使用するいくつかの方法を試しましたが、何も機能しません。

ベストアンサー1

使用sed:

$ sed 's/-[^-]*-[^-]*$//' file
foo-11.11-fo.o
bar-foo

-X-Xこれにより、各行の末尾に含まれていないfile文字列が削除されます。X-

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

$ s='foo-11.11-fo.o-foo-bar'
$ printf '%s\n' "${s%-*-*}"
foo-11.11-fo.o

$ s='bar-foo-11.11-22.11'
$ printf '%s\n' "${s%-*-*}"
bar-foo

またはbash配列から:

$ s=( 'foo-11.11-fo.o-foo-bar' 'bar-foo-11.11-22.11' )
$ printf '%s\n' "${s[@]%-*-*}"
foo-11.11-fo.o
bar-foo

これにより、サフィックスパターンのマッチング/削除によって、-*-*変数の文字列の末尾にあるパターンと一致するすべてのエントリが削除されます。配列のs場合、s配列のすべての要素に対して削除が実行されます。

おすすめ記事