2013-02-08 5 views
0

탭으로 구분 된 파일에 1의 추가 열을 추가하고 싶습니다. 파일은 다음과 같습니다 : 나는 그것을 할 싶어sed 추가 열 추가

#> cat /tmp/myfile 
Aal  Fisch_und_Fleisch 
Aalsuppe  Fisch_und_Fleisch 

방법은 새로운 열의와 함께 그것을 밖으로 인쇄, 전체 라인을 일치, SED입니다. 추가 열이 대신 말의 라인의 중간에 기록 그러나 : 나는 비록 그것이 작동하는 몇 가지 수동으로 생성 라인 전성 검사, 수행 할 때

#> cat /tmp/myfile | sed 's#^\(.*\)$#\1\t1#g' 
Aal  1isch_und_Fleisch 
Aalsuppe1  Fisch_und_Fleisch 

는 :

#> echo -e "aaaaaaaaaa\taaaaaaaaaaaa\nbbbbbbb\tbbbbbbbb" | sed 's#^\(.*\)$#\1\t1#g' 
aaaaaaaaaa  aaaaaaaaaaaa 1 
bbbbbbb bbbbbbbb  1 

을 나는 그것을 짐작 이 인코딩/줄 바꿈 문제의 경우

#> file /tmp/myfile 
/tmp/myfile: ASCII text, with CRLF line terminators 

, 나는 그것에 대해 어떻게 가야합니까 : 인코딩/줄 바꿈 문제가있을 수 있습니다, 여기에 무슨 말을 file입니까?

+0

캡쳐 된 그룹 다음에'$'이 (가) 있으므로'sed'는 라인 중간에서 linebreak를 감지해야합니다. –

답변

3

나는 당신의 정확한 문제를 재현 할 수 아니지만, 전에 비슷한 일을 보았다. 기본적으로 CRLF 행 끝은 시각적 표시에서 불규칙성을 일으킬 수 있습니다. CR 부분 인 캐리지 리턴이 커서가 새 행의 시작이 아닌 같은 행의 시작으로 이동할 수 있기 때문입니다. 아마 Unix 스타일의 엔딩으로 바꾸는 것이 가장 쉽다. 당신이 다시 전환해야하는 경우

당신은 unix2dos을 사용할 수,

cat /tmp/myfile | dos2unix | sed 's#^\(.*\)$#\1\t1#g' 

처럼, 전체적으로

dos2unix 
tr -d '\r' 

중 하나를 사용, 유닉스 스타일의 엔딩에 뭔가를 전환합니다.

1

당신 (GNU이 나오지도)에 대한이 작동 될 수 있습니다

sed 's/$/\t1/' file 
+1

이것은 OP의 버전보다 간단하지만 문제는 잘못된'sed' 명령이 아닙니다. OP 명령도 작동합니다. –

+0

내 것보다 훨씬 좋네요, 고마워요! – benroth