文字列の短縮

文字列の短縮

.txtファイルを読み取り、結果をどこかに保存するスクリプトを作成しています。

表現を減らす必要があります。

str1/str2/str3/str4/str5

私はただ必要です。str5上の内容です。

ループから1行ずつファイルを読み込んでいますwhile

そのような文字列を減らすには?

答え1

このbasenameユーティリティは、パス名のファイル名部分を返します。文字列をパス名として処理すると、次のものが返されますstr5

string=str1/str2/str3/str4/str5
basename -- "$string"

上記の出力はstr5。これは$string、改行文字が含まれている場合、または次から始まる場合にも機能します-

string='-str1/str2/str3/str
4/str5'
basename -- "$string"

結果をbasename変数に保存することは、一般的なコマンド置換によって行われます。

newstring=$( basename -- "$string" )

しかし、コマンドの置き換え巻きみんな末尾の改行文字:行区切り文字として出力される文字ですが、末尾にbasenameある改行文字も含まれます$string

これはPOSIXシェルの演算子を使用して回避することができます${var##pattern}(また、プロセスをフォークし、別のコマンドを実行することを節約できます)。

string='very/
strange
file name

'
newstring=${string##*/}

ただし、s のよう$stringな他の値を提供します。//some/dir/

答え2

これはあなたに効果がありますか?

string="str1/str2/str3/str4/str5"

echo $string | awk -F'/' '{print $5}'

-F は区切り文字を指定するために使用されます。

答え3

whileループからファイルを読み取るときは、次のことができます。

while IFS='/' read -r one two three four five junk; do
  echo "$five"
done < yourfile

または、次のものを使用できますcut

cut -d'/' -f5 yourfile

答え4

簡単な代替を使用できます。

echo ${string##*/}

例えば

string="str1/str2/str3/str4/str5"
echo ${string##*/}

出力を提供しますstr5。文字列に改行文字がある場合にも機能します。

/可変サイズ文字列がある場合にも機能します。つまり、文字列にどれだけの文字列が含まれているのかわかりません。

関連情報