sed는 #으로 시작하지 않는 일치하는 행을 대체합니다.

sed는 #으로 시작하지 않는 일치하는 행을 대체합니다.

"테스트 파일"이라는 파일이 있습니다. 다음 두 줄만 있습니다(첫 번째 줄에는 # 기호가 있고 두 번째 줄에는 내용은 동일하지만 해시가 없습니다).

#contents of line
contents of line

sed 명령을 사용하여 두 번째 줄의 내용을 업데이트/교체하고 싶습니다. 나는 다음과 같은 간단한 구문을 알고 있습니다.

sed -i 's/.*contents of line.*/updated contents/' test-file

그러나 위의 명령은 이 두 줄을 대체하므로 첫 번째 줄을 앞의 # 기호로 업데이트하고 싶지 않습니다.

답변1

다음과 같은 방법으로 편집할 수 있습니다.

sed -e '/^#/!s/.*/UPDATED_CONTENTS/' input-file.txt

또는

sed -e '/^#/!c\
UPDATED_CONTENTS' input-file.txt

이는 다음과 같이 이해될 수 있습니다. 로 시작하지 않는 줄의 경우 #전체 줄을 지정된 내용으로 변경합니다.

octothorpe 앞에 가능한 공백이 염려된다면 /^[[:blank:]]*#/나머지는 변경하지 않고 정규식을 조정하세요.

답변2

노력하다

sed 's/^[^#]*contents of line.*/updated contents/' test-file

또는 행 앵커로 시작 ^하고 행이 로 시작하는 것을 알고 싶다면 content ...다음을 수행할 수 있습니다.

sed 's/^contents of line.*/updated contents/' test-file

업데이트하려는 행을 알고 있는 경우 해당 주소 행 번호를 직접 변경할 수 있습니다.

sed '2s/.*/updated content/' test-file

-i결과가 만족스러우면 추가하세요.

관련 정보