2016-10-14 7 views
1

한 줄에 sed 명령을 사용하여 공백이 아닌 #으로 시작하는 주석 줄만 유지하려고합니다. 나는이 아무것도 인쇄하지 않습니다, 그러나이비어있는 주석 줄을 SED로 유지

sed /^#\S+/'!'d file

을 시도하고있다.

파일이

# comment 
# another comment 
# 
#  
# 
line1 
line2 
# extra comment 

같은 형태의 말 그리고

# comment 
# another comment 
# extra comment` 

내 명령을 전혀 출력을 제공하지 않습니다합니다. 가능한 가장 간단한 방법으로이 작업을 수행하려고합니다. 어떤 생각? sed

+1

[편집 도움말] (http://stackoverflow.com/editing-help)을 참조하십시오. – Cyrus

답변

2

:

sed -n '/^[[:blank:]]*#[[:blank:]]*[^[:blank:]]/p' 
  • [:blank:]

  • ^[[:blank:]]* 다음,

  • # 리터럴 # 일치 시작에 0 개 이상의 공백과 일치 공간과 탭을 포함 문자 클래스 [[:blank:]]*은 0 또는 이상의 공백

  • [^[:blank:]] 공간이나 탭을 제외하고

참고 모든 문자와 일치하지 어떤 공백이 아닌 특별한 순서 \S의 모든 sed의 지원 확대.

예 :

$ cat file.txt 
# comment 
# another comment 
# 

# 

# 
line1 
line2 
# extra comment 

$ sed -n '/^[[:blank:]]*#[[:blank:]]*[^[:blank:]]/p' file.txt 
# comment 
# another comment 
# extra comment 
+0

이것은 효과가 있습니다. 나는 delete 명령을 사용하는 방법을 사용하려고 노력해 왔지만 일치하는 것으로 생각하고 인쇄하는 것이 더 쉽습니다. 잘 설명했다. 고맙습니다. – ricknaght

1

이 필수을 SED 있습니까? 그렇지 않은 경우, 예를 들어 grep '^\s*#.*[^\s]'을 시도해 볼 수 있습니다. 주석 기호가 포함 된 행을 0 개 이상의 공백 문자 뒤에 인쇄합니다. 공백 문자에도 공백 문자가 하나 이상 포함되지 않습니다.

2
$ grep '#.*[^[:blank:]]' file 
# comment 
# another comment 
# extra comment 

$ sed -n '/#.*[^[:blank:]]/p' file 
# comment 
# another comment 
# extra comment 

$ awk '/#.*[^[:blank:]]/' file 
# comment 
# another comment 
# extra comment 
관련 문제