OSX에서 파일의 특정 문자열 뒤에 텍스트를 삽입하는 방법은 무엇입니까?

OSX에서 파일의 특정 문자열 뒤에 텍스트를 삽입하는 방법은 무엇입니까?

나는 이 게시물의 지침을 따랐습니다.파일의 특정 문자열 뒤에 텍스트를 삽입하는 방법은 무엇입니까?

그러나 나는 이 지침이 OSX에서는 작동하지 않을 것이라고 생각합니다.

Bash를 사용하여 소스 파일에 텍스트를 추가하고 싶습니다.

sed '/pattern/a some text here' ${sourceFile}

하지만 명령을 실행하면

"/pattern/a 여기에 텍스트가 있습니다.": 명령 a에는 \ 뒤에 텍스트가 와야 합니다.

편집하다

infileSingle Line이라는 새 파일을 만들었습니다.

pattern

그리고 bash 스크립트

#!/bin/bash
sed '/pattern/a\
text to insert' infile

스크립트를 실행하면 "패턴"이 콘솔에 에코되지만 텍스트는 삽입되지 않습니다.

편집하다

나는 또한 bash 스크립트를 시도했다

#!/bin/bash
sed '/pattern/a\
add one line\
\\and one more' infile

그리고 터미널 에코

pattern
add one line
\and one more

하지만 infile에는 여전히 한 줄만 있습니다.

pattern

답변1

OSX에 하나가 있는지 잘 모르겠습니다 ed.긍정적인 제안), 여기에 또 다른 옵션이 있습니다.

grep -q pattern infile && ed -s infile  <<< $'/pattern/\na\ntext to insert\n.\nw\nq' > /dev/null

그러면 다음 명령이 다음으로 전송됩니다 ed.

  1. /pattern/--"패턴"을 검색하세요.
  2. a-- 줄 뒤에 다음 텍스트를 추가합니다.
  3. text to insert- 텍스트
  4. .-- 텍스트 끝에 삽입
  5. w-- 업데이트된 파일을 디스크에 쓰기
  6. q——편집 종료

리디렉션은 일치하는 행을 >/dev/null침묵시키도록 보고됩니다 .edpattern

검색하라는 요청을 받기 전에 파일에 "패턴"이 존재하는지 확인하기 위해 ed명령 앞에 Quiet을 붙였습니다 . 그렇지 않으면 패턴 검색이 실패할 때 혼란스러울 것입니다 .greped?ed

답변2

사용하는 것을 잊어버린 -i내부 편집 옵션 sed. sed는 stream editor입력을 변경하지 않습니다. 출력 파일을 명시적으로 다시 입력으로 이동하거나 가능한 경우 -i 옵션을 사용해야 합니다.

#!/bin/bash
sed -i '' -e '/pattern/a\
add one line\
\\and one more' \
infile

관련 정보