2009-11-21 2 views
0

나는 이것을 사용하고 싶습니다 :Perl에서 비어 있지 않은 모든 줄의 처음과 끝에 문자를 추가하는 방법은 무엇입니까?

perl -pi -e 's/^(.*)$/\"$1\",/g' /path/to/your/file 

를 텍스트 파일의 각 줄의 끝에서, "라인의 시작 부분에"추가하십시오. 문제는 일부 줄이 단지 빈 줄이며이 줄이 바뀌길 원하지 않는다는 것입니다. 어떤 아이디어를 어떻게 위의 코드를 수정하거나 어쩌면 완전히 다르게합니까?

답변

9

다른 사람들은 이미 그 스타일을 살펴 보자, 정규식 구문 문제를 대답했다.

s/^(.*)$/\"$1\",/g 

이 정규식 /// 당신의 두뇌 출혈을 만드는 곳 "이쑤시개 증후군을 기대어"에서 겪고있다. 균형 잡힌 구분 기호의

s{^ (.+) $}{ "$1", }x; 

사용, 공간 것들 밖으로 불필요한 backwhacks의 제거에/X 수정 읽기 정규식이 훨씬 쉬워집니다. 또한이 정규식은 한 줄에 한 번만 일치하므로/g는 필요하지 않습니다.

+0

그게 더 많은 읽을 수있게, 감사합니다! – Phil

7
perl -pi -e 's/^(.+)$/\"$1\",/g' /your/file 

. *는 0 개 이상의 문자와 일치합니다. . +는 1 또는 그 이상과 일치합니다.

.+.*\S.*으로 바꾸고 비 공백 문자가 포함 된 줄만 인용 할 수 있습니다.

4

변경. * to. +

즉, 줄은 1 자 이상이어야합니다. . *는 0 개 이상의 문자를 나타냅니다.

4

당신은 너무처럼 + (1 이상)으로 * (0 이상)를 대체 할 수 있어야한다 :

perl -pi -e 's/^(.+)$/\"$1\",/g' /path/to/your/file 
3
sed -r 's/(.+)/"\1"/' /path/to/your/file 
4

당신이하고있는 모든 전면에 뭔가를 추가 그리고 라인의 뒤로, 그래서 정규식에 대한 필요가 없습니다. 그냥 그들을 인쇄하십시오. 파일이 크면 그러한 작업을위한 정규 표현식은 비싸다.

둔한

$ awk 'NF{print "\042" $0 "\042,"}' file 

또는 Perl

$ perl -ne 'chomp;print "\042$_\042,\n" if ($_ ne "") ' file 
+0

빈 줄도 수정하지 않습니까? 그는 그가 그것을 원하지 않는다고 말했다. –

+0

쉽게 수정할 수 있습니다. done – ghostdog74

+0

Perl 버전에서, 단지 pedantic이 되려면'if $ _ ne '대신'if $ _ ne' '를 원한다. '$ _'은 비어 있지 않은 특정 행 (특히, 고독한 0을 포함하는 행)에 대해 false로 평가됩니다. –

관련 문제