While 루프가 문자열을 올바르게 구문 분석/붙여넣을 수 없습니다.

While 루프가 문자열을 올바르게 구문 분석/붙여넣을 수 없습니다.

다음 내용이 포함된 .txt 파일이 있습니다.

"[email protected]"

이제 while 루프를 사용하여 이 문자열을 stdout에 붙여 넣어서 echo가 작성해야 합니다."text [email protected] text"

while read line;
do 
    echo "text $line text"
done <./textfile.txt

하지만 내가 얻는 것은 다음과 같습니다.text"[email protected]"

text--> 공백과 다음 공백이 $line손실됩니다.

다음과 같이 변경하면

while read line;
do 
     echo "text\ $line text"
done <./textfile.txt

알겠어요text "[email protected]"

--> 첫 번째 뒤에 text공백이 있지만 그 다음에는 공백 [email protected]이 없습니다 text.

답변1

~부터텍스트 처리에 쉘 루프를 사용하는 것은 나쁜 습관으로 간주됩니다., 전용 텍스트 처리 도구를 사용하는 다른 접근 방식을 권장합니다. 특히 awk저는 다음 사항에 대해 생각했습니다.

awk '{printf "text %s text\n",$0}' textfile.txt 

이는 Awk의 내장 printf함수(잘 알려진 C 함수와 동일한 형식화 구문 사용)를 사용하여 $0양쪽 끝에 포함된 전체 현재 줄( 로 표시됨)을 인쇄합니다.text

귀하의 접근 방식이 작동하지 않는 이유는 다음과 같습니다.텍스트 파일이 Windows 기반 컴퓨터에서 편집되었음을 확인하셨으므로 이는 줄 끝이 Linux에서 올바르게 해석할 수 없는 형식임을 의미합니다. 이 경우 dos2unix아래와 같이 파일을 실행하면 됩니다.

dos2unix textfile.txt

생성된 파일은 올바르게 처리되어야 합니다.

답변2

자신을 소개하고 perl저와 함께 공부해보세요.

perl -ne ' s/\n|"//g ; print "\"text $_ text2\"\n" ' infile.txt
  • 파일을 한 줄씩 읽기-n
  • 인라인 스크립트 실행-e
  • 입력 줄에서 모든 줄바꿈과 따옴표를 제거합니다.s/\n|"//g
  • 원하는 형식으로 문자열을 인쇄하십시오.
  • $_이들은 각각 입력의 변수와 처리 형식입니다.

관련 정보