다음 내용이 포함된 .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
- 원하는 형식으로 문자열을 인쇄하십시오.
$_
이들은 각각 입력의 변수와 처리 형식입니다.