2013-01-09 8 views
1

일부 텍스트 파일을 명령 줄로 구문 분석하려고합니다. 이 중 일부는 잘못된 형식의 이메일에서 깨진 단어를 다시 첨부하는 것과 관련이 있습니다. 예 :Mac OS X의 .sh 파일에서 sed 사용

9,650 330,765.0 16.38% NYSE (000) 1,707,915 272,099.0 18.95%  Commodit= 
ies Close Change % Change Crude Oil (Feb) 19.62 0.32 1.66% Heating Oil (Ja= 

나는 '상품'을 들고 싶다. 이 일을 끝내기 위해이 workaround을 사용하고 있습니다.

Mac OS X 10.7 및 GNU sed 버전 4.2.1을 사용하고 있습니다. 커맨드 라인에 입력하면

sed ':a;N;$!ba;s/=\r\n//g' ./filename 

sed가 올바르게 작동합니다. 그러나이 bash 스크립트를 실행하면

#!/bin/bash 


sed ':a;N;$!ba;s/=\r\n//g' filename 

sed가 작동하지 않습니다. 그러나 동일한 스크립트는 우분투의 명령 줄에서 작동합니다

9,650 330,765.0 16.38% NYSE (000) 1,707,915 272,099.0 18.95%  Commodities Close Change % Change Crude Oil (Feb) 19.62 0.32 1.66% Heating Oil (Jan) 

을 내 맥,

#!/bin/bash 


sed 's/=//g' filename 

이 성공적으로 모든 등호를 제거하는 간단한 스크립트에. 역 슬래시 문자를 여러 가지 조합으로 시도했지만 성공하지 못했습니다. 맥 터미널이 좋아하지 않는 것에 대한 어떤 힌트?

+0

예제 파일에는 각 줄의 마지막 등호 뒤에 공백이 하나 있습니다. 명령이 실패하는 이유가 될 수 있습니까? 또한, 아마 OSX에서 작동하도록'#!/bin/sh '으로 바꾸는 것이 좋습니다. 행운을 빕니다. – Steve

+0

@steve 귀하의 제안에 감사드립니다. 불행하게도/bin/bash를/bin/sh로 변경하는 것은 효과가 없었습니다. :(공백을 제거하기 위해 예제 파일을 업데이트했습니다. 실제 파일에 없습니다. – RussH

답변

0

대부분 PATH 설정입니다. /bin/bash은 기본값 인 $PATH을 사용합니다. 왜 그런지는 모르겠지만 어쩌면 평범한 작업 쉘 (bash)에 의존하거나 PATH 설정이있는 도트 파일에있을 것입니다.

OS X에는 GNU와 동일하지 않은 자체 (BSD) sed가 함께 제공되므로 작동하지 않습니다. 스크립트에서 sed 명령을 실행하면 자체 설치 한 GNU sed가 아니라 BSD sed가 선택됩니다. 스크립트에서 sed의 전체 경로를 사용하거나 이전에 스크립트에서 $ PATH를 설정하십시오. 분명히 우분투에서는 문제가 없습니다. 기본값은 sed이 GNU이기 때문입니다.

+0

음, 내 스크립트에서 'sed'대신 'gsed'를 입력하면 작동하는 것으로 보입니다. MacPorts 또는 당신이 맞다. 스크립트에 의해 호출 된 sed는 다르다. 흥미롭게도, 스크립트에'echo $ PATH'를 넣었을 때 명령 행에서 같은 명령을 입력했을 때와 같은 PATH를 보였다. – RussH

+1

'sed'를 명령 줄에서 호출 할 수는 있지만 스크립트에서 가져올 수는 없으며'PATH'는 동일합니다. 스크립트에서 인식/확장되지 않은 별명 일 수도 있습니까? – Evert

+0

고마워요. 다시 보니 별칭 sed = ' gsed '내 .bashrc 파일 인치 내 .bash_profile 및 .profile 파일 http://stackoverflow.com/questions/4477328/bashrc-not-read-when-shell-script-is-invoked- 바탕 화면 바로 가기에서 내 별칭을 여전히 스크립트에서 인식되지 않습니다 ... 여전히 그것을 알아 내려고. – RussH