ファイル名のサフィックスを一致させる方法

ファイル名のサフィックスを一致させる方法

ファイル名.xmlで終わるかどうかを確認するには.any-string?たとえば、.previous、.backup、bck12など...

.any-string次に終わるか、それに続く何も含まないXMLファイル名を印刷する必要があります。.xml

grep、awk、sed、perl、またはその他のアイデアを使用してこれをどのように確認できますか?それはまるで

 file=machine_configuration.xml
 file=machine_configuration.xml.previos
 file=machine_configuration.xml.backup
 echo $file | .....

例:

  1. machine_configuration.xml: はい
  2. machine_configuration.xml.OLD:いいえ
  3. `machine_configuration.xml-HOLD:いいえ
  4. machine_configuration.xml10:いいえ
  5. machine_configuration.xml@hold:いいえ
  6. machine_configuration.xml_need_to_verifi_this:いいえ

答え1

アンカー()を終了するには正規表現を使用してください。$例:

echo "$file" | grep '\.xml$'

「xml」で終わるすべてのファイルを見つけるには、次のコマンドを使用することをお勧めしますfind

find . -name '*.xml'

現在のディレクトリのすべてのxmlファイルが繰り返し表示されます。

答え2

私が正しく理解した場合は、ファイル名が.xml

case $file in
  *.xml) echo "$file";;
esac

ファイル名が一致しない場合に対処したい場合は、次の手順を実行してください。

case $file in
  *.xml) echo "matched $file";;
  *) echo "skipping $file";;
esac

答え3

変数にファイル名が既にある場合、良いアプローチは次のとおりです。パラメータ拡張

$ echo $file
text.xmllsls
$ echo ${file%.xml*}.xml
text.xml

そのうち%.xml*最後の項目.xmlとそれ以降の項目はすべて削除されます。だから.xmlもまたエコーしました。

またはテストも実行します。

$ file=test.xmlslsls
$ file2=${file%.xml*}.xml
$ if [ $file = $file2 ]; then echo $file; fi
$
$
$ file="test.xml"
$ file2=${file%.xml*}.xml
$ if [ $file = $file2 ]; then echo $file; fi
test.xml

またはラインで

$ if [ $file = ${file%.xml*}.xml ]; then echo $file; fi

答え4

最も簡単な方法は...

echo  file=machine_configuration.xml | cut -d '.' -f 1

関連情報