라는 파일이 .ignore
있습니다. 를 교체해야합니다 projdir
. 예를 들면 다음과 같습니다.
ignore \..*
ignore README
projdir Snake
Snake를 “PacMan”과 같은 것으로 바꿔야합니다. 맨 페이지를 읽었지만 어떻게해야할지 모르겠습니다.
답변
로 시작하는 줄을 검색 projdir
하고 전체 줄을 새 줄로 바꿉니다.
sed -i 's/^projdir .*$/projdir PacMan/' .ignore
^
그리고 $
패턴이 전체 라인을 일치하므로, / 행 끝 마커를 시작하고있다; .*
무엇이든 일치합니다. 는 -i
이야기 sed
에 직접 변경 사항을 작성하는 .ignore
단지를 출력하는 대신,
답변
한 가지 방법은 유지할 부분에 대한 역 참조를 사용하여 전체 줄을 다시 작성하는 것입니다.
sed -e 's/^\( *projdir *\)[^ ]*\(.*\)*$/\1PacMan\2/'
다른 접근 방식은 다른 부분이 일치하는 경우에만 해당 부분을 다시 작성하는 것입니다.
sed -e '/^ *projdir / s/ [^# ]/ PacMan/'
두 예제 모두 첫 번째 단어가있는 행에서 두 번째 공백으로 구분 된 단어를 다시 작성합니다 projdir
.
답변
이 게시물은 오래된 게시물이며 허용되는 답변으로 해결되는 것 같지만 실제 질문에 대한 답변은 없습니다. 완전성과 다른 사람들을 돕기 위해 :
여기 “projdir”로 시작하는 줄이 아니라 “Snake”와 실제로 일치하는 답이 있습니다.
sed -r 's/(^.*)Snake/\1PacMan' .ignore
이것은 “Snake”를 포함한 줄의 시작부터 “Snake”+ “PacMan”이전의 모든 것으로 바뀝니다. \ 1은 () 안에서 일치하는 것을 의미합니다. “뱀”이후의 모든 것은 그대로 유지됩니다.
답변
sed -i 's:^projdir.*$:projdir PacMan:g' .ignore
^ projdir은 문자열 projdir로 시작하는 행을 찾는 것입니다. . * $는 같은 행에서 projdir 뒤의 문자열을 나타냅니다. 문자열 projdir PacMan은 교체 할 문자열입니다. g는 전역을위한 것입니다-projdir로 시작하는 모든 그러한 줄을 대체합니다. .ignore는 파일 이름입니다.