ls lib/oracle-11.2.0.3.0.txt | sed 's/lib.\([oracle.*]\)\.txt/\1/'
.txtまで、Oracle部分だけでなく完全な文字列も提供します。私が何を間違っているのでしょうか?
以下のようにawkを使用してこれを実行できますが、sedが目的の結果を提供しない理由はわかりません。
echo "lib/oracle-11.2.0.3.0.txt" | awk -F/ '{print substr($2,1,index($0,".txt")-1);}'
ベストアンサー1
[oracle.*]
「文字、、、、、、、、oまたは」のrいずれかを表します。したがって、正規表現は次のように一致します。acle.*
lib+c.txt
実際のファイル名の代わりに渡します。正規表現からと[
を削除すると]
正常に動作します。
ls lib/oracle-11.2.0.3.0.txt | sed 's/lib.\(oracle.*\)\.txt/\1/'
しかし、より簡単なアプローチは
basename lib/oracle-11.2.0.3.0.txt .txt
または、本当にファイルを次からインポートしたい場合stdin
:
ls lib/oracle-11.2.0.3.0.txt | xargs -I{} basename {} .txt