2014-06-07 5 views
1

일부 신비한 이유로 인해 CSV 데이터로 ;을 설정했기 때문에 CSV 데이터의 일부 요소가 stWgvN522tw0JtZZnyXj 대신 s/stWgvN52??f2& ?"으로 표시됩니다. bash - 문자열을 sed로 바꾸기

나는 다음과 같이 sed를 사용하여 결함이있는 문자열을 대체하기 위해 시도 :

$ sed -i 's/stWgvN52??f2& ?"/stWgvN522tw0JtZZnyXj/g' file.csv 

을하지만, 나는 다음과 같은 오류 얻을 : 가 나오지 : 1 : "access_logs_2014-04.csv을"하십시오 예상하는 명령 텍스트 뒤에 \

이유가 무엇입니까?

+2

[sed 명령이 Mac에서는 작동하지 않지만 Linux에서는 작동합니다] (http://stackoverflow.com/questions/4247068/sed-command-failing-on-mac-but-works-on-linux) – Barmar

답변

6

-i 옵션을 사용하면 만들어지는 백업 파일의 확장명을 지정해야합니다. sed의 일부 버전에서는 확장자가 -i 옵션에 직접 추가되기를 기대하므로 작성한 내용이 효과가 있습니다. 그러나 다른 버전이 작성해야하므로, 별도의 옵션이 될하는 데 필요 (OS X의 버전 등) :

sed -i '' 's/stWgvN52??f2& ?"/stWgvN522tw0JtZZnyXj/g' file.csv 

가 백업 파일을하지 않도록 지정 할 수 있습니다.

+0

정규 표현식에서'? '를 벗어나면 확장 된 정규 표현식으로 동작하고 앞의 문자 (GNU sed) 중 0 또는 하나를 허용하는 메타 문자가됩니다. 따라서 확장 된 regexp 스위치'-r' (다른 sed에서 -E)을 사용하지 않는다면, 그것을 벗어날 필요가 없습니다. – potong

+0

모든 regexp 변형의 세부 사항을 기억하는 것은 너무 어렵습니다. 나는'? '이 확장 된 RE가 아닌 기본 RE라고 생각했다. – Barmar

관련 문제