2011-09-19 4 views
2

나는 여기서 내가 묻고있는 것에 가깝지만 어떤 것이 아니라는 몇 가지 예를 보았다.줄 끝에서 문자 패턴을 제거하기 위해 sed를 사용 하시겠습니까?

필자가 sed를 사용하여 제거하려는 불필요한 열 데이터가있는 파이프로 구분 된 플랫 파일이 있습니다. 기본 구조는 다음과 같습니다

Column1|Column2|Column3|ignore 
data1|data2|data3|ignore 
data4|data5|data6|ignore 

내가 생산하는 것이다 나오지 사용하여 식을 원하는 :

Column1|Column2|Column3 
data1|data2|data3 
data4|data5|data6 

이 쉽게 바보해야하지만, 항상 정규 표현식와 sed 내 머리를 다치게하고 관리 할 수 ​​있습니다. 나는 이것이 작동 할 것이라고 생각했다 :

sed "s/\|ignore//" table1.txt >filtered.txt 

그러나 이것은 아무 것도하지 않는 것처럼 보인다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

참고 : 이것은 Windows 용 GNU sed입니다.

+1

아래 해결 방법 외에도 패턴을 고정 시키십시오 :'/ | ignore $ /'. 그렇게하면 부주의하게 라인 중간에서 일치하지 않게됩니다. –

답변

3

파이프를 벗어나지 마십시오.

$ sed 's/|ignore//' table1.txt > filtered.txt 

내 컴퓨터에서 작동합니다. (Cygwin에서 GNU sed.)

여기서 아이디어는 \|이 리터럴 파이프가 아니라 정규 표현식 파이프라는 것입니다. 나는 이런 것들을 이해하는 방법을 모르지만 sed regex에 (, { 또는 |을 사용하려면 반드시 이스케이프 처리해야합니다. 그러나 [은 리터럴 문자가 필요하지 않으면 이스케이프 처리되지 않습니다.

+0

하! 나는 그것이 어리 석고 단순한 무언가라는 것을 알았다. 그게 효과가 있었어. –

+0

@Eric'man 7 regex' 그리고''basic ''을 검색하십시오. –

+0

@ JoshLee 감사합니다. 유용합니다. 하지만 '7 정규식'은 무엇을 의미합니까? –

3

\|에서 |으로 변경하십시오. 당신은 대안이 필요하지 않습니다. 당신은 문자 그대로의 파이프를 원합니다.

또는 \|을 사용하는 경우 을 sed로 전달하여 확장 구문을 나타내십시오.

0

몇 가지 가능한 해결책 here. 또한 cut을 사용하지 않는 이유는 무엇입니까?

+0

Windows에서 잘라 붙이기를 언급하지 않는다면, 나는 그 유틸리티에 대해 들어 본 적이 없다고 말할 수 있습니다. 내가 Windows에 있다는 것을 명심하십시오. –

+0

사과 - 당신이 창문에 대해 sed 한 이후 나는 다른 유닉스 -y 텍스트 유틸리티를 모두 가지고 있다고 생각했습니다. [link] (http://gnuwin32.sourceforge.net/packages/coreutils.htm) –

관련 문제