次のフォルダにappimageファイル名を印刷するシェルスクリプトがあります。
#! /bin/bash
Dir="$HOME/Applications/"
Dir2="$HOME/Downloads/"
cd -P "$Dir"
for f in *.AppImage; do
z=$(echo $f | head -n1 | awk '{print $1;}')
echo $z
done
これで出力は次のようになります。
Altus-4.8.5-x86_64.AppImage
GitHubDesktop-linux-3.2.0-linux1.AppImage
webamp-desktop-0.3.0-x86_64.AppImage
YTDownloader.AppImage
出力が次のようになります。
Altus
GitHubDesktop-linux
webamp-desktop
YTDownloader
どうすればいいですか?
答え1
サフィックスを削除するには%
:
for f in *.AppImage; do
f=${f%.AppImage}
echo "${f%%-[0-9]*}"
done
答え2
以下を使用しますsed
(ファイル名に改行文字がないと仮定します)。
printf '%s\n' "$fileName" |
sed -E 's/(-[0-9].*)?\.AppImage//'
答え3
GNUの使用grep
:
<INTPUT> | grep -oP '^\D+(?=-\d|\.)'
使用Perl
:
<INPUT> | perl -nE 'say $& if /^\D+(?=-\d|\.)/'
出力
Altus
GitHubDesktop-linux
webamp-desktop
YTDownloader
正規表現の一致は次のとおりです。
正規表現 | 説明する |
---|---|
^\D+ |
正規表現の先頭で、数字以外の1文字以上の文字と一致します。 |
(?=-\d|\.) |
選択に含めずにハイフン、数字、ピリオドを一致させようとするプレビューを実行します。 |
答え4
ファイル名に改行が含まれていないとし、awk を使用します。
printf '%s\n' *.AppImage | awk -F'[.]|-[0-9]' '{print $1}'
改行文字を含めることができる場合は、GNU awkまたはRSにNULを使用できる他のバージョンを使用してください。
printf '%s\0' *.AppImage | awk F'[.]|-[0-9]' 'BEGIN{RS=ORS="\0"} {print $1}'