質問

いファイル名の形式のように:

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top