나는 이 게시물의 지침을 따랐습니다.파일의 특정 문자열 뒤에 텍스트를 삽입하는 방법은 무엇입니까?
그러나 나는 이 지침이 OSX에서는 작동하지 않을 것이라고 생각합니다.
Bash를 사용하여 소스 파일에 텍스트를 추가하고 싶습니다.
sed '/pattern/a some text here' ${sourceFile}
하지만 명령을 실행하면
"/pattern/a 여기에 텍스트가 있습니다.": 명령 a에는 \ 뒤에 텍스트가 와야 합니다.
편집하다
infile
Single 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
.
/pattern/
--"패턴"을 검색하세요.a
-- 줄 뒤에 다음 텍스트를 추가합니다.text to insert
- 텍스트.
-- 텍스트 끝에 삽입w
-- 업데이트된 파일을 디스크에 쓰기q
——편집 종료
리디렉션은 일치하는 행을 >/dev/null
침묵시키도록 보고됩니다 .ed
pattern
검색하라는 요청을 받기 전에 파일에 "패턴"이 존재하는지 확인하기 위해 ed
명령 앞에 Quiet을 붙였습니다 . 그렇지 않으면 패턴 검색이 실패할 때 혼란스러울 것입니다 .grep
ed
?
ed
답변2
사용하는 것을 잊어버린 -i
내부 편집 옵션 sed
. sed는 stream editor
입력을 변경하지 않습니다. 출력 파일을 명시적으로 다시 입력으로 이동하거나 가능한 경우 -i 옵션을 사용해야 합니다.
#!/bin/bash
sed -i '' -e '/pattern/a\
add one line\
\\and one more' \
infile