sed
文字列の末尾から11個の数字を削除するプログラムを作成しようとしています。これは私のコードです...
fname="1a.out12345678901"
fname=$(echo "$fname"|sed 's/[0-9]{11}//')
しかし、これは次のように文字列の末尾からどのように削除しますか?fname
にのみ設定されます。1a.out12345678901
sed
12345678901
ベストアンサー1
Bashは外部プロセスを呼び出すことなく操作を実行できます。
11桁の数字で終わると、fname
その数字は削除されます。
[[ $fname =~ (.*)[0-9]{11}$ ]] && fname=${BASH_REMATCH[1]}
メモ:
この方法では、サブシェルや外部プロセスを作成する必要がないため、より高速です。この操作がループで行われる場合は、速度が重要になる可能性があります。
$(...)
望ましくない副作用のあるコマンドの置き換え。たとえば、シェルはコマンド置換から末尾の改行文字を削除します。このアプローチは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