스크립트를 사용하여 텍스트 파일의 내용에 여러 프로세스를 적용하고 수정된 내용을 새 txt 파일에 저장하려면 어떻게 해야 합니까?

스크립트를 사용하여 텍스트 파일의 내용에 여러 프로세스를 적용하고 수정된 내용을 새 txt 파일에 저장하려면 어떻게 해야 합니까?

"bash 스크립트와 명령줄 도구를 사용하여 다음 기능을 구현합니다. 생성한 스크립트는 다음과 같이 실행되어야 합니다. 그리고 해당 디렉터리의 *.txt 파일을 처리해야 합니다. 이 처리는 다음 단계로 구성됩니다. 1. 모두 소문자로 만듭니다. 2. 모든 xml/html 태그를 제거합니다. 3. 텍스트 파일에 있는 모든 약어를 바꿉니다. 4. 모든 숫자를 단어로 변환합니다. 팁:- sed 명령을 사용할 수 있습니다.

여기에 이미지 설명을 입력하세요.

그림과 같이 코드를 작성했습니다. 저는 실제로 Linux를 처음 접했기 때문에 이 작업을 수행하려면 다른 명령을 검색해야 했습니다. 그러나 작업의 요구 사항에 따라 출력은 터미널에서 각 작업을 개별적으로 인쇄하는 대신 실제로 다른 파일을 생성하고 수정된 내용(4개의 프로세스를 적용한 후)을 해당 새 파일에 써야 합니다.

암호:

#1. Converts all text inside file 1.txt to lowercase
tr '[A-Z]' '[a-z]' < 1.txt
#2. Removes html/xml tags from the text
sed -e 's/<['^]>'*>//g' 1.txt
#3 Replaces all acronyms with full names
sed 's/doc/document/' 1.txt
#4 Converts all numbers to full words
sed 's/2/two/' 1.txt

파일 텍스트: 임의의 문서입니다. 해당 문서가 2개 있습니다. <b>상관없어</b>

예상 출력: 이것은 임의의 문서입니다. 그러한 문서가 두 개 있습니다. 난 상관 없어

감사해요!

답변1

문제는 귀하의 명령 중 어느 것도 파일을 수정하지 않는다는 것입니다. 그들은 모두 표준 출력에 기록합니다(즉, 터미널 창에 결과를 표시합니다). 일반적으로 저는 두 가지 방법을 생각합니다.

  1. 파일을 복사하고 옵션 플래그를 사용하여 명령이 복사된 파일을 그 자리에서 수정하도록 하거나

  2. 파이프와 출력 리디렉션을 사용하여 모든 작업을 적용하고 결과를 새 파일에 씁니다.

첫 번째 접근 방식의 한 가지 문제점은 모든 명령줄 프로그램이 내부 파일 수정을 지원하지 않는다는 것입니다. 이 경우 sed파일을 그 자리에서 편집할 수 있는 옵션이 있습니다. -i옵션 플래그를 사용하여 sed파일을 그 자리에서 편집하도록 지시합니다. 이 tr프로그램은 내부 편집을 지원하지 않지만 tr명령을 명령으로 쉽게 바꿀 수 있습니다 sed. 이로 인해 다음과 유사한 스크립트가 생성될 수 있습니다(약간 수정됨).

#0. Create a copy of the file
cp -i 1.txt 2.txt

#1. Converts all text inside file 2.txt to lowercase
sed -i -e 's/\(.*\)/\L\1/' 2.txt

#2. Removes html/xml tags from the text
sed -i -e 's/<['^]>'*>//g' 2.txt

#3 Replaces all acronyms with full names
sed -i -e 's/doc/document/' 2.txt

#4 Converts all numbers to full words
sed -i -e 's/2/two/' 2.txt

파이프와 리디렉션을 사용하고 싶다면 다음과 같은 대안이 나올 수 있습니다.

cat 1.txt \
| sed -e 's/\(.*\)/\L\1/' \
| sed -e 's/<['^]>'*>//g' \
| sed -e 's/doc/document/' \
sed -e 's/2/two/' \
> 2.txt

이는 귀하의 과제에 대한 해결책이 아닙니다. 변경 사항이 파일에 기록되는 방식에 대한 문제만 해결합니다.

관련 정보