파일에 주석이있는 모든 줄은로 시작합니다 #
. #
?로 시작하는 모든 줄과 그 줄만 어떻게 삭제 합니까? 행 #
의 시작 부분에 포함 되지 않지만를 포함하는 다른 행은 무시해야합니다.
답변
답변
아무도 가장 명백한 해결책을 제안하지 않은 것에 약간 놀랐습니다.
grep -v '^#' filename
이렇게하면 명시된대로 문제가 해결됩니다.
그러나 공통된 규칙은 #
줄 끝에서 끝까지 주석으로 처리하는 것입니다.
sed 's/#.*$//' filename
예를 들어 #
문자열 리터럴 내의 문자를 주석의 시작으로 처리합니다 (귀하의 경우와 관련이 있거나 그렇지 않을 수 있음) (빈 줄은 남겨 둡니다).
임의의 공백으로 시작하는 줄 #
주석으로 처리 될 수 있습니다.
grep -v '^ *#' filename
공백이 공백 일 경우
grep -v '^[ ]#' filename
여기서 두 공백은 실제로 공백 다음에 리터럴 탭 문자 ( “control-v tab”유형)입니다.
이러한 모든 명령에 대해 filename
표준 입력 (예 : 파이프의 일부)에서 읽을 인수를 생략하십시오 .
답변
레이몬드 솔루션의 반대 :
sed -n '/^#/!p'
“#로 시작하지 않는 줄을 제외하고는 아무것도 인쇄하지 마십시오.”
답변
당신은 직접 파일을 편집 할 수 있습니다
sed -i '/^#/ d'
공백 사용으로 시작하는 주석 줄도 삭제하려면
sed -i '/^\s*#/ d'
일반적으로 스크립트의 경우 첫 번째 줄을 유지하려고합니다 .로 sed
시작하는 줄을 삭제해서는 안됩니다 #!
. 또한 해시 만 포함하고 텍스트는 포함하지 않는 행을 삭제해야합니다. 모두 합쳐서 :
sed -i '/^\s*\(#[^!].*\|#$\)/d'
모든 sed 변형을 준수하려면 -i
옵션에 백업 확장을 추가해야합니다 .
sed -i.bak '/^\s*#/ d' $file
rm -Rf $file.bak
답변
awk 솔루션에 다음을 사용할 수 있습니다.
awk '/^#/ {sub(/#.*/,"");getline;}1' inputfile
답변
이 답변은 Keith 의 이전 답변을 기반으로합니다 .
egrep -v "^[[:blank:]]*#"
주석 행을 필터링해야합니다.
egrep -v "^[[:blank:]]*(#|$)"
자주 유용한 것처럼 주석과 빈 줄을 모두 필터링해야합니다.
[:blank:]
기타 캐릭터 클래스 에 대한 정보는 https://en.wikipedia.org/wiki/Regular_expression#Character_classes 를 참조하십시오 .
답변
다음은 확장명이있는 모든 파일에 대한 루프입니다.
ll -ltr *.filename_extension > list.lst
for i in $(cat list.lst | awk '{ print $8 }') # validate if it is the 8 column on ls
do
echo $i
sed -i '/^#/d' $i
done