特定のディレクトリのファイル名を解析しようとしています。ファイル名の形式は次のとおりです。
token1_token2_token3_token(N-1)_token(N).sh
区切り文字'_'
を使用してトークンを切り取り、最後の2つのトークンを除いて文字列を取得する必要があります。上記の例では、出力はtoken1_token2_token3
である必要があります。
トークンの数は固定されていません。 cut
コマンドの-f#-
オプションを使用して実行しようとしましたが、解決策が見つかりませんでした。何か案は?
カットあり:
$ echo t1_t2_t3_tn1_tn2.sh | rev | cut -d_ -f3- | rev
t1_t2_t3
revは各行を反転します。 3-
in -f3-
は、3番目のフィールドから行の終わりまでを意味します(これは、反転されていないテキストの最後から3番目のフィールドを通る行の始まりです)。
POSIXで定義されたパラメーター置換を使用できます。
$ name="t1_t2_t3_tn1_tn2.sh"
$ name=${name%_*_*}
$ echo $name
t1_t2_t3
cut
では実行できませんが、sed
またはawk
は使用できます。
sed -r 's/(_[^_]+){2}$//g'
Ysthの答えを書くためのちょうど別の方法
echo "t1_t2_t3_tn1_tn2.sh" | rev |カット-d "_" -f1,2 --complement | rev