2014-09-14 2 views
0

방법 파일에서 얻을 수있는 같은 라인에 라인의 서브 텍스트 :앞에 추가

This is a line 2 
There is 1 line 
imagine 3 lines 
two times two is 4 
There is no number here 

다음 :

2, This is a line 2 
1, There is 1 line 
3, imagine 3 lines 
4, two times two is 4 

그래서, 접두사가 라인에서 검색되며 라인마다 다를 수 있습니다. bash와 perl에서이 작업을 수행하는 방법은 무엇입니까? 대략적으로 같은

s/\d+/$&, $`$&$'/ 
+1

는 [펄 정규식 튜토리얼]를 살펴 보자 (http://perldoc.perl.org/perlretut.html) 당신은 할 수 있어야 그것을 해결하십시오. –

답변

2
sed -En 's/.*([0-9]+).*/\1, &/p' filename 
+0

-E 플래그는 무엇을합니까? 확장 정규식과 관련된 뭔가? -n은 대체가 발생하지 않은 행을 출력하지 않도록합니다. 내가 맞습니까? –

+1

당신 말이 맞아요. '-E'를 사용하면 특수 문자를 이스케이프하기 위해 일부 백 슬래시를 생략 할 수 있습니다. – Cyrus

3

는 펄 하나의 라이너를 사용하여

perl -ne 'print "$1, $_" if /(\d+)/' filename 

스위치 :

  • -n 각 “ 라인 ”에 대한 while(<>){...} 루프를 작성 당신의 inp ut 파일.
  • -e : perl에게 명령 줄에서 코드를 실행하도록 지시합니다.
+0

-n 플래그에 대해 알지 못했습니다. 좋은 분! –

2
명령 줄에서 bash를 사용

:

$ while read -r line; do 
    [[ $line =~ [0-9]+ ]] && echo "${BASH_REMATCH[0]}, $line"; 
done < file 
2, This is a line 2 
1, There is 1 line 
3, imagine 3 lines 
4, two times two is 4 
+0

그게 나를 위해 발전, 나는 대략 이해하지만 코드는 다음과 같은 구문을 모르겠습니다. –

+1

@FiboKowalsky [Here] (http://mywiki.wooledge.org/BashGuide/Patterns#Regular_Expressions-1)는 시작하기 좋은 참고 자료입니다. –