echo는 기존 줄에 추가되어 해당 줄을 이어갑니다.

echo는 기존 줄에 추가되어 해당 줄을 이어갑니다.

:/etc/simmmerin/bin/echo 명령을 사용하여 파일의 filename기존 줄 에 문자열을 추가하는 방법 . 작동시킬 수 없습니다.

echo ":/etc/simmerin/bin/" >> filename

내가 원하는 줄을 계속하는 대신 파일 맨 아래에 추가됩니다. 나는 echo각 파일이나 그와 유사한 것을 사용하는 대신 사용하고 싶습니다 vim.

답변1

파일 끝에는 이미 줄 바꿈 문자가 있어 마지막 줄을 종료합니다. 추가 내용은 다른 줄에 표시됩니다. 마지막 개행 문자를 덮어써야 하는데 >>리디렉션만으로는 그렇게 할 수 없습니다. 아마도 사용하기 가장 쉬운 방법은 다음과 같습니다 sed.

$ seq 1 4 | sed -e '$s,$,stuff/to/append,'
1
2
3
4stuff/to/append

sed파일을 제자리에서 수정 하려면 다음을 사용하세요.

sed -i -e '$s,$,stuff/to/append,' filename

(달러 기호에는 두 가지 의미가 있습니다. 첫 번째 $는 다음 명령이 실행되는 줄을 제어하는 ​​주소입니다. 여기서는 마지막 줄입니다. 두 번째는 $줄 끝을 나타내는 정규식 표현입니다.)


마지막 줄이 아닌 줄에 추가하려면 첫 번째 줄을 $줄 번호나 패턴 일치로 바꾸세요. 그러면 다음을 포함하는 모든 줄에 문자열이 추가됩니다 foo.

sed -i -e '/foo/ s,$,stuff/to/append,' filename

여기서는 s명령 구분 기호 로 쉼표를 사용하고 있습니다. 슬래시가 더 일반적이지만 추가되는 텍스트에는 슬래시가 포함되어 있습니다. 이 s명령을 사용하면 (거의) 모든 문자를 사용할 수 있습니다.

올바른 줄을 찾는 데 사용되는 패턴에 슬래시가 있으면 유사한 \,foo,주소를 사용할 수 있습니다. 즉, 백슬래시로 시작하고 편리한 구분 기호를 사용할 수 있습니다.

답변2

기존 파일을 수정하려면 sed명령을 사용할 수 있습니다.

추가할 문자열과 이를 삽입하려는 줄 번호가 있다고 가정합니다.

mystring=":/etc/simmerin/bin/"
lineno=10

문자열 삽입시작선:

sed "${lineno}s,^,${mystring}," file

문자열 삽입선:

sed "${lineno}s,\$,${mystring}," file

문자열 삽입앞으로은행:

sed "${lineno}s,^,${mystring}\n," file

문자열 삽입뒤쪽에은행:

sed "${lineno}s,\$,\n${mystring}," file

답변3

newline이미 파일 끝에 있습니다. 줄 바꿈 크기는 1바이트입니다. 이 truncate명령을 사용하면 파일을 1바이트만큼 축소한 다음 파일 끝에 추가할 수 있습니다.

truncate -s -1  filename && echo ":/etc/simmerin/bin/" >> filename

답변4

echo 대신 printf를 사용하면 기본적으로 "\n"이 추가되지 않습니다.

printf는 bash 명령이므로 쉘이 이를 지원하는지 확인하십시오.

관련 정보