인사말,
저는 파일 내용을 배열로 구문 분석하는 데 필요한 간단한 bash 스크립트를 작성하고 있습니다. 파일의 항목은 "개행"으로 구분됩니다. 따라서 파일은 다음과 같습니다.
path/to/file
path/to/other/file
내용을 파싱하고 반복하고 싶습니다. 내 코드는 현재 다음과 같습니다.
CONTENT=`cat /path/to/text/file.txt`
for PATH in $CONTENT
do
echo $PATH
chmod -R 440 $PATH
fi
이 코드는 UNIX 줄 끝이 있는 파일에서 잘 작동합니다. 그러나 Windows 형식의 텍스트 파일을 사용하면 비참하게 질식합니다. "echo $PATH" 문은 올바른 경로를 생성하지만 chmod는 파일이 존재하지 않는다는 메시지를 표시하지 못합니다. 내 요령은 Windows 줄 끝이 잘리지 않아서 새 줄 문자가 포함된 파일 경로를 chmod하려고 한다는 것입니다.
대상 파일이 Unix 또는 Windows 개행 문자로 생성되었는지 여부에 관계없이 이 작업이 작동하도록 해야 합니다. 하지만 쉘 스크립팅에 다소 익숙하지 않기 때문에 어떻게 해야 할지 잘 모르겠습니다.
도와주셔서 감사합니다!
답변1
각 줄을 처리할 때 캐리지 리턴만 제거하면 되는 것 같습니다. 가장 쉬운 방법은 dos2unix
유틸리티를 사용하는 것이지만, 시스템에 유틸리티가 없거나 얻을 수 없는 경우 tr
다음과 같이 를 사용하여 비슷한 작업을 수행할 수 있습니다.
echo $PATH | tr -d '\r'
사용과 같은 더 많은 아이디어는 sed
다음에서 확인할 수 있습니다.위키피디아기입.
편집하다:$PATH
이 이름은 의심할 여지 없이 환경에 의해 설정되고 다른 프로그램이 그 값에 따라 달라질 수 있기 때문에 훌륭한 변수 이름은 아니라는 점을 지적하고 싶습니다 . 와 같은 것으로 변경하는 것을 고려해야 합니다 $CUR_PATH
.
답변2
스크립트의 첫 번째 줄을 변경하겠습니다.
CONTENT=$(tr -d \\r < /path/to/text/file.txt)