아래의 my.txt에서 'third'및 공백 행을 삭제하고 my.txt에 o/p를 저장하려고합니다. sed 명령은 무엇이되어야합니까? 참고 :이 현재 위치에서 파일을 수정 할 파일sed로 텍스트 또는 빈 줄을 삭제하는 방법은 무엇입니까?
my.txt -
first
sec
third
third
third
아래의 my.txt에서 'third'및 공백 행을 삭제하고 my.txt에 o/p를 저장하려고합니다. sed 명령은 무엇이되어야합니까? 참고 :이 현재 위치에서 파일을 수정 할 파일sed로 텍스트 또는 빈 줄을 삭제하는 방법은 무엇입니까?
my.txt -
first
sec
third
third
third
sed -i 's/third//g' my.txt
의 끝까지 루프에 있어야합니다. 당신은
을 수행 할 수 있습니다 GNU가 나오지 사용
sed -i -r '/^(third|)$/d' my.txt
표준 (POSIX) 'sed'가 지원하지 않는 확장 정규 표현식을 사용합니다. 그것은 틀린 것이 아닙니다. 이것은 단지 확장되어야 할 부분입니다. –
는 덮어 쓰기가 '-i
'옵션을 사용하여 간단하다; 표준 sed를 사용하면 임시 파일에 쓰고 원본 파일에 복사해야합니다.
다른 답변은 질문에서 '공백 라인'요건을 충족하지 못합니다.
sed -i '/third/d;/^[ ]*$/d' my.txt
명령의 첫 번째 부분은 세미콜론까지 'third'를 찾아 일치하는 줄을 삭제합니다. 명령의 두 번째 부분은 0 개 이상의 공백으로 구성된 행을 찾아 삭제합니다. 공백과 탭이있는 행을 삭제하려면 문자 클래스에 탭을 추가하십시오. SO 마크 업 언어로 탭을 표시하는 편리한 방법이 없습니다.
당신은 동등하게 작성할 수
sed -i -e '/third/d' -e '/^[ ]*$/d' my.txt
그리고 비 GNU에 대한
가 나오지도, 당신이 사용하는 것 :sed '/third/d;/^[ ]*$/d' my.txt > x.$$
cp x.$$ my.txt
rm -f x.$$
GNU sed가 없다면, 다른 방법은 일반'ed'를 사용하는 것입니다. 명령은 동일하지만 전체 구문은 다릅니다. – mouviciel
문자 클래스 ('[\ t]')에서'\ t'를 사용하거나'[[: blank :]]'(공백이나 탭)이나'[[: space :]]'(POSIX locale : space, tab, newline, carriage return, form feed, vertical tab. 마지막 예제에서는'sed ... && cp ...'를 실행하는 것이 더 좋으므로 원본 파일은'sed' –
@Dennis : GNU sed에 대해서는''\ t''에 대해 아마 맞을 것이지만, POSIX 표준은이를 인식하지 못하고 명령을 내리지도 않으며, Solaris 10도 (GNU sed가 표면적으로 솔라리스 10 sed는 '[: blank :]] 등을 인식하는 것 같지만, 행동하지 않는 것 같습니다. 모든 세계는 GNU를 사용하지 않습니다. 조건부 사본에 대해 당신이 맞습니다. –
sed
그것이 이 스트림 편집 할 수있는 스트림 편집기, 즉이다 (파이프) 파일이 아닙니다. 당신이 파일을 편집 할 경우, 당신은 ed
같은 파일 편집기를 사용한다 :
ed my.txt <<-HERE
,g/^third$/d
,g/^$/d
w
q
HERE
글로벌 명령을 앞서는 쉼표의 의미는 무엇입니까? –
@Jonathan Leffler : 주소입니다. 'a, b'는 "a에서'a ' 라인'b' ". 'a'의 기본값은'1'이고'b'의 기본값은'$'입니다, 즉 마지막 줄입니다. Ergo,', '는 "1 행에서 마지막 행"으로, 전체 파일을 IOW로 의미합니다. 'ed'는 파일 편집기이기 때문에 파일에서 실제로 움직일 수 있습니다. 따라서 모든 명령은 주소를 취합니다. 'sed' OTOH는 일반적으로 스트림으로 거꾸로 갈 수 없기 때문에 OTOH가 그렇게 할 수있을 것이라고 기대할 수 없습니다. –
OK : 당신이 달리 지정하지 않는 한 전역 검색의 범위가 전체 파일이기 때문에 나는 항상'g/^ third $/d'를 사용했습니다. 'x'로 시작하는 이전 줄로 'z'로 시작하는 다음 줄로 작업을 제한하려면 '?^x?,/^ z/g/^ third $/d'와 같이 입력하십시오. 그러나 쉼표를 추가하는 것은 나에게 발생하지 않았다. 그리고 내가 아마 'ed'를 사용할 때 그 특별한 경우에는 가지 않을 것이다. –
이 줄을 삭제하지 않습니다, 그냥 빈 문자열과 '세 번째'대체합니다. –
@Sean : 실제로; 나는 그 질문을 잘못 읽은 것 같다. –