"begin"이라는 단어 뒤에 텍스트 파일에 변수를 추가하고 싶습니다. echo $variable
준다
rn=45
fg=12
cd=6
내 텍스트 파일은 다음과 같습니다.
mixture
Molefraction
begin
END_OF_FILE
내가 원하는 출력
mixture
Molefraction
begin
rn=45
fg=12
cd=6
END_OF_FILE
이 sed
명령을 사용하고 있습니다
sed -i "/begin/a $variable" file.txt
다음과 같은 오류 메시지가 표시됩니다.
sed: -e expression #1, char 56: extra characters after command
sed
"here-strings"에 대해 알고있는 쉘 사용 :
$ sed '/begin/r/dev/stdin' file <<<"$variable"
mixture
Molefraction
begin
rn=45
fg=12
cd=6
END_OF_FILE
이것은 문자열 begin
을 찾고 file
이것이 일치하면 표준 입력에있는 모든 것이 삽입됩니다. $variable
here-string을 통해 표준 입력 의 값을 전달 합니다.
다른 쉘의 경우 here-string은 printf
파이프 를 통해 사소하게 대체됩니다 .
$ printf '%s\n' "$variable" | sed '/begin/r/dev/stdin' file
mixture
Molefraction
begin
rn=45
fg=12
cd=6
END_OF_FILE
이것을 새 파일에 저장하려면 끝에 리디렉션을 사용하십시오. 를 사용하여 sed
내부 편집을 지원하는 경우 sed -i
원본 파일을 수정하는 데 사용할 수 있습니다 (파일 사본에서이를 테스트하는 것이 좋습니다. 여러 번 실행하면 파일에 데이터가 여러 번 추가됨).
예를 들어 올바른 들여 쓰기를 얻으려면 bash
:
$ ( set -f; IFS=$'\n'; printf ' %s\n' $variable ) | sed '/begin/r/dev/stdin' file
mixture
Molefraction
begin
rn=45
fg=12
cd=6
END_OF_FILE
여기서는 변수 값의 형식을 지정하기 위해 쉘의 단어 분할에 의존합니다. set -f
파일 이름 globbing이 발생하지 않는지 확인하기 위해 사용 $IFS
하고 개행으로 설정 하고 쉘이 변수 값을 개행으로 구분 된 단어로 분할하도록합니다. 는 printf
약간 각 단어의 앞의 두 공간을 삽입하도록 수정된다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다