2011-08-01 3 views
1

나는 sed를 배우려고하고 있지만 문제가 발생했습니다. 나는에라는 파일을 가지고 설명해 드리죠 : anystring는 단지 예이기 때문에, 내가 원하는 코드가있을 수 있다는 것을 의미한다ARRAY = ... 형태로 줄을 제거하려면 어떻게해야합니까? 뭐라구?

code.. 
ARRAY=(anystring); 
code.. 

. 이제 sed로 "ARRAY = ...;"줄을 지우고 싶습니다.

sed "/ARRAY=[a-z]*;/d" in > out 

나를 위해 잘 작동 : 반면,

sed "/#ARRAY=.*;/d" in > out 

그러나 성공하지 :

내가 함께했습니다. 문제는 "ARRAY ="다음에 모든 문자가있을 수 있다는 것입니다 (분명히 제외).

어떻게하면됩니까?

+2

이전 질문에 대한 답변을 수락하십시오. –

답변

3

이 사용해 ARRAY 시작해야

sed '/^ARRAY=.*;/d' in >out 

행의 시작은 ^하지 #로 표현된다. 스위스 공청회에서 제안한 바와 같이 공백을 허용하는 경우에는 공백을 사용하십시오.

sed '/^[ \t]*ARRAY=.*;/d' in >out 
3

첫 번째 명령에서 '#'문자를 제거하십시오. '#'문자는 sed regex에서 특별한 의미가 없습니다.

1

sed "s/^ARRAY=.*;//g" <in >out 또는 더 나은 아직 sed "/^ARRAY=.*;/d" <in >out

은 "의"수단, 대체. 따라서 s/ABC/DEF/은 ABC를 DEF로 대체 함을 의미합니다. "g"는 전역을 의미하므로 첫 번째 줄 대신 모든 줄을 제거합니다. ^ 수단은 라인

+0

나는이 대답이 정말로 문제를 정확하게 다루고 있다고 생각하지 않는다. 첫째, 'd'스위치 대신 's'스위치를 불필요하게 사용합니다. 둘째, 'ARRAY'앞에 공백이 올 수 있다는 사실을 무시합니다. 셋째, 실제 오류가 REGEX에 있다는 사실을 유추합니다. – Swiss

관련 문제