2010-05-21 7 views
2

현재 처리중인 Makefile에서 일부 텍스트를 프로그래밍 방식으로 제거하는 방법이 필요합니다. 이제 문제는 (어떤 이유로 든) 메이크 파일은 -l<library_name>으로 생성되어야 할 때 -l<full_path_to_library>/<library_name>의 링크 명령으로 생성된다는 것입니다. 그래서 내가 필요한 것은 -l/의 모든 발생을 찾아 다음 /까지 제거하는 스크립트입니다.awk/sed 스크립트를 사용하여 텍스트를 제거하십시오.

내가 필요한 내가

-l/홈/사용자/경로를 처리하고있어 /에가/부스트/lib 디렉토리/boost_filesystem

예는하기

-lboost_filesystem

이것은 상상할 수있는 것처럼 나는 실제 문제를 해결할 때까지 측정하지만, 그 동안에는 이것이 효과가 있고 내 awk와 sed에 좋지 않은 경우 큰 도움이 될 것입니다.

도움 주셔서 감사합니다. 여기

+0

당신이 왜 * 빌드 시스템은 처음에 메이크를 망쳐하고있다 *의 문제를 다루는하지 않는 특별한 이유가 이동? – dmckee

+0

질문에서 언급했듯이 이것은 스톱 갭 솔루션입니다. 현재 필요한 특정 기능을 갖춘 빌드 시스템의 비공식 패치를 실행하고 있습니다. 불행히도 명시된 문제로 메이크 파일을 생성하고 있습니다. 확실히 새로운 기능을 적절하게 통합하여이 문제를 해결할 의향이 있지만, 그 동안은 모든 것을 설정하고 지금 할 수있게 된 후 내 응용 프로그램을 컴파일 할 수 있기를 원했습니다. – radman

답변

4
sed -i 's|-l[^ ]*/\([^/ ]*\)|-l\1|g' Makefile 
+0

공백을 추가했습니다. '-l'과 '-lrelative-librarypath/lib'의 일치를 피하기 위해 – msw

+0

은 내 목적을위한 매력처럼 작동합니다. :) – radman

1

당신은

echo "-l/home/user/path/to/boost/lib/boost_filesystem" | awk -F"/" '{ print $1 $NF } ' 
+0

그 것은 단일 테스트 케이스를 처리하지만, 포함 된 라인의 여러 인스턴스의 일반적인 문제는 처리하지 않습니다 다른 텍스트. awk가 줄 행동에서 가장 행복하다면 스크립트 렛에 패턴을 추가 할 수 있지만 sed는 여기에서 더 나은 선택입니다. – msw

관련 문제