次のテキストがあります。
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
配列のすべての要素に対して削除が実行されます。