ls -1
내 요소를 다음과 같이 나열하십시오.
foo.png
bar.png
foobar.png
...
다음과 같은 항목 없이 나열되기를 원합니다 .png
.
foo
bar
foobar
...
(이 디렉토리에는 .png
파일만 포함되어 있습니다)
grep
이 경우에 누군가 그것을 사용하는 방법을 말해 줄 수 있습니까?
목적: 모든 이름을 나열하지만 확장자는 나열하지 않은 텍스트 파일이 있습니다. 어떤 파일이 누락되었는지 확인하기 위해 텍스트 파일을 폴더와 비교하는 스크립트를 만들고 싶습니다.
답변1
ls -1 | sed -e 's/\.png$//'
이 명령은 다음 을 sed
제거(즉, 빈 문자열로 대체)합니다..png
끝파일 이름.
정규식 (모든 문자와 일치함을 의미) 이 아닌 리터럴 문자 로 해석되도록 .
이스케이프 합니다 . 줄 끝 앵커이므로 파일 이름 중간과 일치하지 않습니다.\.
sed
.
.
$
.png
답변2
필요한 것은 작업을 수행하는 데 필요한 쉘뿐입니다.
POSIX적으로:
for f in *.png; do
printf '%s\n' "${f%.png}"
done
그리고 zsh
:
print -rl -- *.png(:r)
답변3
Bash만 사용하고 싶다면:
for i in *; do echo "${i%.png}"; done
grep
일치하는 항목을 찾으려면 삭제/교체하는 대신 sed
더 적합한 항목에 접근해야 합니다.
find . -maxdepth 1 -name "*.png" | sed 's/\.png$//'
PNG 파일의 순서를 조정하기 위해 일부 하위 디렉터리를 만들어야 한다고 결정한 후에는 쉽게 다음과 같이 변경할 수 있습니다.
find . -name "*.png" | sed 's/\.png$//'
답변4
매우 유사한 또 다른 답변은 다음과 같습니다(이 특정 변형이 아직 나타나지 않았다는 사실에 놀랐습니다).
ls | sed -n 's/\.png$//p'
- 표준 출력은 터미널(이 경우 파이프)이 아닌 것으로 가정되므로 옵션
-1
이 필요하지 않습니다 .ls
ls
- 옵션은 "기본적으로 이 줄을 인쇄하지 않음"을
-n
의미합니다 .sed
/p
대체 끝에 있는 옵션은 "...대체가 이루어지면 이 줄을 인쇄하십시오"를 의미합니다.
최종 효과는 으로 끝나는 줄만 인쇄 .png
하고 삭제하는 것 입니다 .png
. 즉, 이는 디렉토리에 파일 이상의 내용이 포함되어 있는 OP 질문의 약간의 일반화도 만족시킵니다 .png
.
sed -n
이 기술은 grep+sed를 사용할 수 있는 상황에서 종종 유용합니다.