2012-07-12 4 views
0

sed를 사용하여 인쇄 할 수없는 문자를 인쇄 할 수없는 다른 문자로 교체하는 데 문제가 있습니다. 특히, 나는 sed가 TAB로 시작하는 테이블에서 라인을 찾고 'BACKSPACE를'삽입해야한다. 본질적으로 그 라인의 텍스트를 이전 라인으로 가져온다.sed를 인쇄 할 수없는 문자와 함께 사용

column1,row1 column2,row1,line1 
       column2,row1,line2 

나는이 (틱)처럼 결국 그것을 싶습니다

column1,row1 column2,row1,line1   column2,row1,line2 
:

그 이유는 내가 테이블이 여러 줄을 차지 일부 행과 열로 분할 한 것입니다

(간격은 중요하지 않음)

나는 이것을 관리 할 수 ​​없다. 표현 \ t 모래 \ b가 인식되지 않는다면 확실하지 않지만, 시도한 방식대로 보이지 않습니다. 어떤 도움을 주시면 감사하겠습니다

sed 's/^\t/\b/' file.txt newfile.txt 


sed 's/^(`echo "\011"`)/`echo "\010"`/' file.txt newfile.txt 

: 나는 이러한

이들의 진수 표현으로 에코 명령을 얻을 수없는 것은 내가 해봤 물건의 종류입니다.

+1

은 당신이 정말로 "백 스페이스를 삽입"시겠습니까, 아니면 줄 바꿈을 제거하기에 충분한 것입니까? 내 말은, 이전에 두 라인으로 퍼져있는 것을 하나의 라인으로 구성하는 것이 최종 목표인지, 아니면 실제 Ctrl-H를 삽입하기를 원합니까? – ghoti

+0

나는 내가 뭘하고 싶은지 위에서 보여 주려고 노력했다.위의 것과 같은 줄로 이동하기 위해 두 번째 열에 들여 쓰는 줄을 들여 쓰고 싶습니다. 그래서 각 '줄'은 한 줄만 차지합니다. 그것이 불분명하면 죄송합니다. – user1488804

+0

"BACKSPACE"ASCII 문자, Ctrl-H 및 편집기 명령 "backspace"를 백 스페이스 키와 ctrl-h 키 조합에 할당하는 것으로 생각합니다. 백 스페이스 문자 삽입은 이전 문자를 마법처럼 제거하지 않습니다. 편집기를 실행하고 ctrl과 H를 함께 눌러 편집기가 문자를 제거하도록해야합니다. 정말 필요한 것은 \ n \ t을 \ t로 바꾸는 것입니다. 정확한 코드를 테스트 할 시간이 없습니다. 다른 사람이 대답을 제공해 주시겠습니까? – Arkadiy

답변

4

나는 sed로 이것을하지 않을 것이다. 물론, sed가 홀드 버퍼에 한 줄을 저장하고, 다음 줄을 읽고, 공백 문자로 시작한다면, 홀드 버퍼를 출력하고 현재 줄을 인쇄 할 수 있습니다 ... 그러나 코드는 여러분의 모뎀처럼 보입니다. 잃어버린 캐리어.

awk를 사용합니다.

awk '/^[^ \t]/ && buf{print buf;buf=""} {buf=buf $0} END{print buf}' input.txt 

이 기능은 무엇입니까?

  • 번째 섹션 {buf=buf $0}buf라는 버퍼에 현재 라인을 추가한다.
  • 그런 다음 첫 번째 섹션 인 /^[^ \t]/ && buf{print buf;buf=""} (아직 buf이 설정되지 않았기 때문에 첫 번째 행에 대해 무시 됨)은 공백으로 시작하지 않는 행 (즉, 새 출력 행의 시작)에 대해 buf을 인쇄합니다. 그런 다음 buf을 다시 설정합니다.
  • 마지막 부분 인 END{print buf}은 남은 부분을 인쇄합니다.
+0

Brilliant. 그냥 똑똑한 – user1488804

1

이 나오지도 매우 추한 사용하지만, 작동 :

echo "a 
<TAB here>b 
<TAB here>c 
<TAB here>d 
e" | sed ':begin N; /\n\t/'\!'n; s/\n\t//; t begin' 

bash\! 기호의 추한 이스케이프에 대한 크레딧을 가져옵니다. 대본에서, 당신은 그것을 떠날 수 있습니다.

+0

명령을 내 스크립트'sed '에 붙여 넣었습니다 : 시작 N;/\ n \ t /'\! 'n; s/\ n \ t //; t 시작' test2.txt' 그러나 실행 후 아무것도 바뀌지 않았습니다. 그것. 나는 틀린 일을하고있을 것임에 틀림 없다. 그러나 나는 무엇을 모르고있다. – user1488804

+0

아마 파일에 탭이 아니라 공백이 있습니까? –

+0

파일에 공백이 없으며 모든 탭이 있습니다. 나는 방금 확신했고 똑같은 일이 일어난다. 나는 bash가 \ n과 \ t 문자를 이해하는 데 어려움을 겪고 있다고 생각하며 무시하고있다. – user1488804

0

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

sed '$!N;s/\n\t/\t/;P;D' file 
관련 문제