2011-04-07 6 views

답변

28

이 그것을 수행해야합니다

sed -e s/deletethis//g -i * 
sed -e "s/deletethis//g" -i.backup * 
sed -e "s/deletethis//g" -i .backup * 

그것은 장소에 편집, 모든 파일에서 ""(아무것도) (*)와 "deletethis"의 모든 항목을 대체합니다.

두 번째 형식에서는 패턴을 좀 더 안전하게 편집 할 수 있으며 ".backup"접미사로 수정 된 파일의 백업을 만듭니다.

세 번째 형식은 sed의 일부 버전과 비슷한 방식입니다. (예 : Mac OS X)

man sed 자세한 내용은

+0

을 주어진 확장자를 가진 백업 파일. 나는. '-i.backup'도 될 수 있습니다 ... – 0xC0000022L

+1

@STATUS 당신 말이 맞아요, 일부 버전의 sed는 실제로 접미사가 필요합니다. – mvds

+2

이 작동하지 않습니다.이 문자열을 삭제합니다.이 문자열이 포함 된 줄을 삭제하려면 – virtue

16
sed -i '/pattern/d' file 

줄을 삭제하려면 'd'를 사용하십시오. 이것은 적어도 GNU-Sed에서 작동합니다.

당신의 Sed의이 옵션이없는 경우, 어쩌면 당신은 수정 저장, 중간 파일을 사용할 수 있습니다, 장소에서 파일을 변경하려면 : 일반적으로하지 않는 소스에 직접 쓰기

sed '/pattern/d' file > tmpfile && mv tmpfile file 

을 work : sed '/pattern/d' file > file 의심되는 경우 시도하기 전에 복사본을 만드십시오.

+1

이것은 원래 질문에 대한 정답입니다. 안전상의 이유로'-i' 대신'-i.bak'를 사용하여 원본 파일의 백업을 만들 수 있습니다. – Mike

+0

이것은 busybox의'sed'에서 작동하지 않습니다. 문자열이 아니라 모든 줄을 지우고 @mvds 응답이 작동합니다. – danigosa

+0

@danigosa : 음, 왜 mvds 대답이 잘못된 것입니까? 질문은 줄이 아니라 문자열을 제거하는 것입니다. 질문을 읽고, 가장 상향 된 대답으로 미덕에 대한 의견을 읽으십시오. –

0

Vim은 방향보십시오 : 나는 일반적으로 표현뿐만 아니라 내가 나오지은`-i.bak` 구문이를 생성 지적하고 싶은 말을 인용 더 좋은 아이디어라고 생각

ex -s +"g/foo/d" -cwq file.txt 
관련 문제