파일 이름 접미사를 일치시키는 방법

파일 이름 접미사를 일치시키는 방법

파일 이름이 .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

관련 정보