2013-01-04 2 views
1

누구든지 라인의 시작이나 끝과 일치하는 정규식을 말할 수 있습니까? 예 : sed 's/[regex]/"/g' filehere을 사용하면 출력은 따옴표로 묶인 각 줄이됩니까? 내가 [\^$][\^\n]을 시도했지만 둘 다 작동하지 않는 것 같았습니다. 아마 분명 뭔가 빠진거야, 나는이한 줄의 시작과 끝을 일치시키는 정규식?

+0

질문에 필요한 모든 태그를 사용하십시오. 정규 표현식은 광범위한 용어입니다. – inhan

답변

4

시도하는 새로운 해요 :

sed -e 's/^/"/' -e 's/$/"/' file 
+0

완벽하게 작동했습니다! 도움을 주셔서 감사합니다 :) –

+1

줄의 시작이나 끝이 줄에 여러 번 나타나지 않으므로 "g"가 필요 없습니다. –

3

는 시작과 모든 라인의 끝 부분에 따옴표를 추가하려면 단순히 :

sed 's/.*/"&"/g' 

재 그래도 각 줄의 시작이나 끝과 일치 시키려고했다면 :

sed -r 's/^|$/"/g' 

그 an ERE (ena ble "-r") GNU sed에서는 작동하지만 오래된 seds에서는 작동하지 않습니다.

0

matthias의 반응은 완벽하지만, 역 참조를 사용하여이를 수행 할 수도 있습니다. 당신이 정규 표현식을 배우는 경우, 그들은 알고있는 편리한 것입니다. 라인 (^)의 시작에 둘러싸여 아무것도 (.*)과 끝을 일치 의미, 그 정규식의 중심에

sed 's/\(^.*$\)/"\1"/g' file 

^.*$입니다 : 여기

는이 역 참조를 사용하여 수행 할 것입니다 방법 줄의 ($), 이는 실제로 전체 줄마다 일치한다는 것을 의미합니다.

해당 용어를 괄호 안에 넣으면 나중에 참조 할 수있는 역 참조를 만듭니다 (바꾸기 패턴에서). 그러나 sed가 리터럴 괄호 대신에 역 참조를 만들려고한다는 것을 깨닫기 위해서는 백 슬래시로 이스케이프 처리해야합니다. 따라서 우리는 검색 패턴으로 \(^.*$\)으로 끝납니다.

교체 패턴은 단순히 이중 인용 부호 다음에 \1이며, 이는 우리의 역 참조입니다 (괄호로 묶인 첫 번째 패턴 일치를 참조하므로 1). 마지막 큰 따옴표를 추가하여 "\1"이되도록하십시오.

+1

^. * $는. *와 같으며^및 $는 중복됩니다. 또한 전체 RE가 일치 할 때 특정 일치하는 문자열을 역 참조 할 필요가 없습니다. –

+0

동의했지만, 명확하게하기 위해 거기에 던져 넣었습니다. 내 대답은 문제의 특정 시나리오를 다루는 방법보다는 역 참조를 사용하는 방법을 보여주기위한 것이 었습니다. – nullrevolution

+0

괜찮 았지만 자신의 특정 질문에 대한 답을 OP에게 보여주는 것이 유용 할 수 있으므로 이것이 최선의 방법이라고 생각하지 않습니다. –

관련 문제