sedを使用して文字列から文字を削除する

sedを使用して文字列から文字を削除する

sed文字列の末尾から11個の数字を削除するプログラムを作成しようとしています。これは私のコードです...

fname="1a.out12345678901"

fname=$(echo "$fname"|sed 's/[0-9]{11}//')

しかし、これは次のように文字列の末尾からどのように削除しますか?fnameにのみ設定されます。1a.out12345678901sed12345678901

ベストアンサー1

Bashは外部プロセスを呼び出すことなく操作を実行できます。

11桁の数字で終わると、fnameその数字は削除されます。

[[ $fname =~ (.*)[0-9]{11}$ ]] && fname=${BASH_REMATCH[1]}

メモ:

  1. この方法では、サブシェルや外部プロセスを作成する必要がないため、より高速です。この操作がループで行われる場合は、速度が重要になる可能性があります。

  2. $(...)望ましくない副作用のあるコマンドの置き換え。たとえば、シェルはコマンド置換から末尾の改行文字を削除します。

  3. このアプローチはPOSIXではありません。バッシュが必要です。

はい

以下は、最後の11桁の数字を削除する方法を示しています。

$ fname="1a.out12345678901"; [[ $fname =~ (.*)[0-9]{11}$ ]] && fname=${BASH_REMATCH[1]}; echo "fname=$fname"
fname=1a.out

fnameが11桁以上で終わると、最後の11桁のみが削除されます。

$ fname="1a.out012345678901"; [[ $fname =~ (.*)[0-9]{11}$ ]] && fname=${BASH_REMATCH[1]}; echo "fname=$fname"
fname=1a.out0

fnameが11桁未満で終わると、数字は削除されません。

$ fname="1a.out1234567890"; [[ $fname =~ (.*)[0-9]{11}$ ]] && fname=${BASH_REMATCH[1]}; echo "fname=$fname"
fname=1a.out1234567890

おすすめ記事