PWD=sgy_comp.20170328_090951.20170328_090730.d_0327____20170325_002526.seiscat
.
2つを定義する必要があります。____
機能しない一般的な構文を使用しようとすると、4つの区切り文字[.____]
として扱われます(と同じ____
です)。____
_
例:
basename $PWD
sgy_comp.20170328_090951.20170328_090730.d_0327____20170325_002526.seiscat
basename $PWD|awk -F[."____"] '{print $4}'
090951
報酬を受けるために頑張っていますd_0327
。私が望む方法で動作しない理由を理解して動作させる正しい構文を探しています。
答え1
[<set>]
マッチ一つ文字(次に展開)要素の構成一部のツールを使用し、場合によっては提供されているものから)<set>
。
[.____]
特別な試合一つ文字(単.
、_
または、または、_
または_
)です_
。言うまでもなく[.____]
同じです[._]
。
2つの文字列のいずれかを一致させるには、|
代替演算子が必要です。
awk -F '\\.|____' '{print $4}'
最新(および標準)を使用してawk
次のように書くこともできます。
awk -F '\\.|_{4}' '{print $4}'
また、[...]
シェルは[...]
シェルワイルドカードでもあるため、引用符で囲む必要があります。あなたの場合は、____
シェル部分のみを引用しました。_
これはシェルにとって特別なものではないため、必要ありません。つまり、現在のディレクトリにorという-F[."____"]
ファイルがある場合、シェルワイルドカードはに渡される前にそのファイルに展開されます。そうでない場合に渡されます(一部のシェルでは一致しないglobの代わりにエラーを報告しますが)。-F.
-F_
-F[."____"]
awk
-F[.____]
awk