いまの構文ファイル名にbash?
質問
いファイル名の形式のように:
system-source-yyyymmdd.dat
持ってき方など、さすがだなと私が構文解析の異なるビットのファイル名を"-"となります。
解決
で利用できます カットコマンド 取得のそれぞれ3つの分野、例えば:
$ echo "system-source-yyyymmdd.dat" | cut -d'-' -f2
source
"-d"区切りで指定し"-f"を指定する数の分野で必要と
他のヒント
良品(っ-)を組込みコマンドが呼びかけています配列
var='system-source-yyyymmdd.dat'
parts=(${var//-/ })
そこでパーツの配列...
echo ${parts[0]} ==> system
echo ${parts[1]} ==> source
echo ${parts[2]} ==> yyyymmdd.dat
警告:これは動作しない場合はファイル名を含む"不思議"に登場するキャラクターなどのスペース、もしくは、天禁止、見積書、backquotes...
お客様の必要に応じて、 awk より柔軟なります。最初のティザー:
# echo "system-source-yyyymmdd.dat" \
|awk -F- '{printf "System: %s\nSource: %s\nYear: %s\nMonth: %s\nDay: %s\n",
$1,$2,substr($3,1,4),substr($3,5,2),substr($3,7,2)}'
System: system
Source: source
Year: yyyy
Month: mm
Day: dd
問題は記述するawkとして柔軟には確かのように呼び出しのiPhone強携帯電話;-)
をご利用 cut
コマンドです。
例えば
echo "system-source-yyyymmdd.dat" | cut -f1 -d'-'
までに最初のビット.
の値を変更する -f
パラメータの適切な部品です。
このガイドを カット コマンドです。
もう一つの方法は、貝殻の内部の構文解析ツールを避けるコストを子プロセス:
oIFS=$IFS IFS=- file="system-source-yyyymmdd.dat" set $file IFS=$oIFS echo "Source is $2"
最も簡単な(IMOうなことをできるだけ利用 read
:
$ IFS=-. read system source date ext << EOF
> foo-bar-yyyymmdd.dat
> EOF
$ echo $system
foo
$ echo $source $date $ext
bar yyyymmdd dat
多くのバリエーションがあると、そのテーマは多くのシェル依存性:
bash$ IFS=-. read system source date ext <<< foo-bar-yyyymmdd.dat
echo "$name" | { IFS=-. read system source date ext
echo In all shells, the variables are set here...; }
echo but only in some shells do they retain their value here
所属していません StackOverflow