![While 루프가 문자열을 올바르게 구문 분석/붙여넣을 수 없습니다.](https://linux55.com/image/200976/While%20%EB%A3%A8%ED%94%84%EA%B0%80%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%98%AC%EB%B0%94%EB%A5%B4%EA%B2%8C%20%EA%B5%AC%EB%AC%B8%20%EB%B6%84%EC%84%9D%2F%EB%B6%99%EC%97%AC%EB%84%A3%EC%9D%84%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
다음 내용이 포함된 .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
- 원하는 형식으로 문자열을 인쇄하십시오.
$_
이들은 각각 입력의 변수와 처리 형식입니다.