2016-07-08 3 views
1

텍스트 파일이 있고 .m2 또는 .M2로 끝나는 모든 줄을 저장하려고합니다. 나는이 여기 Sed. 특정 파일 형식으로 끝나는 줄을 저장하십시오.

D:\filetype\core\sed.exe -n -e "s/^\(.*\)\.M2//" D:\filetype\listfile\test.txt > D:\filetype\listfile\test2.txt 

등 여러 가지 방법을 시도하지만 결과로 나는 단지 emtpy TEXTFILE을 얻을, 그래서 뭔가 내 코드에 문제가 있습니다 같아요.

다른 방법이었다

D:\filetype\core\sed.exe -n -e "^/\(.*)\/.M2\/" D:\filetype\listfile\test.txt > D:\filetype\listfile\test2.txt 

그러나이 경우 내가 오류

알 수없는 명령의 소스 찾을 수 없습니다 : '^'

감사합니다 누군가 내 잘못을 볼 수 있다면.

답변

2

당신은 sed 명령 아래에 사용할 수 있습니다

sed -n -e '/\.[mM]2$/p' <file_name> 

지금 당신의 명령을 문제로오고 끝에 .m2 또는 .M2이 모든 라인을 인쇄합니다. 첫 번째 명령을 수행합니다 명령에 s에 의해 indiacated search and replace 명령입니다

sed -n -e "s/^\(.*\)\.M2//" 

합니다. 이 명령의 구문은 s/search_text/replace_text/입니다. 이제 명령을주의 깊게 살펴보면 무언가를 찾고 nothing으로 바꾸고 있습니다 - 명령에서 마지막으로 //으로 표시된대로 - replace_text이 누락되었습니다.

귀하의 두 번째 명령은 잘못된 구문입니다

sed -n -e "^/\(.*)\/.M2\/" 

않습니다. sed를 명령의 일반 구문은 다음과 같습니다

sed -e 'line_range command' 

라인 범위 - 선택입니다 - 될 수 있습니다 줄 번호 1, 5, 2-5, 또는 /[gG]/, /[gG][iIuU]rl/ 같은 정규 표현식있다. line_range이 누락 된 경우 sed 명령의 첫 번째 문자는 명령이어야합니다. 귀하의 경우 : line_range이 누락되었습니다 - 현명한 구문입니다 - 그러나 첫 번째 문자는 ^입니다. 이 아닌 sed 명령 - 구문 오류가 발생하고 있습니다.내가 제안

명령

line_range 정규 표현식 /\.[mM]2$/이며, 여기에

sed -n -e '/\.[mM]2$/p' 

입니다 - "any line which has .m2 or .M2 at the end"을 말한다 및 명령은 인쇄 명령의 문자입니다 p이다.

+0

답장을 보내 주셔서 감사합니다. 이제 Google을 검색하는 동안 더 잘 이해할 수 있습니다. 나는 그것을 나의 개인적인 마음에 드는 사람에게 여기에서 덧붙인다. – Deex

1

Sed는 주로 텍스트를 변환하는 데 사용됩니다. 대신 grep을 사용하지 않으시겠습니까?

grep -i "\.m2$" 

이 소문자를 구별 (-i) 어떤 라인이 .m2로 끝나는 경우와 일치합니다.

+0

좋은 질문입니다. 저는 이것이 주로 sed와 함께 할 수있는 방법을 찾아 낼 수 없었기 때문에 주로 생각합니다. 정보가 나를 더 잘 이해하는 데 도움이 될 수 있습니다. 하지만 물론, 당신 말이 맞아요, 언제 sed를 사용할 것인지 그리고 언제 grep을 생각할 것입니다. – Deex

관련 문제