2012-12-05 3 views
1

sed 명령을 처음 사용합니다. 일부 소스 코드에 대한 빌드 스크립트를 읽고 있었고 루프에서이 스크립트를 발견했습니다.빌드 스크립트의 sed 명령

for x in '*.la'  
do  
sed -i -e 's|^\(libdir=.\).*\(/opt/toolchains\)|\1\2|' x  
done 

나는 루프이가하고있는 기능을 이해할 수 아니에요. 누구든지 도와 줄 수 있어요. 여기서 (X를

libdir=X[zero-or-more-chars]/opt/toolchains 

: 그것은 발견 ".la"로 각 파일에 대한 끝나는 현재 디렉토리에있는 파일의 일련의 반복하는 것

+0

'commandlinefu.com'으로 이동하고'sed -i -e'를 입력하면 더 나은 개념을 이해하는 데 도움이되는 다양한 예제가 표시됩니다. –

답변

1

, 그것은 형태의 라인을 변환 나오지 사용하여 내용을 편집하는 것 환언

libdir=X/opt/toolchains. 

, 그것은 그 라인 [또는 제로 - 더 - 문자] 부분을 제거하는 것 : 폼의 라인에 어떤 문자)이다.

사실, sed 명령이 x가 아닌 $ x를 참조하기를 기대하기 때문에 실제로는 버그가있는 것처럼 보입니다. 복사/붙여 넣기 단계에서 $를 잃어버린 느낌이 들었습니다 (또는 단순히 버그 일뿐입니다).

+0

"libdir =/var/root/opt/toolchains"인 경우 "libdir = // opt/toolchains"로 변경됩니다. 내가 맞습니까? 네, 그건 오타였습니다. 나는 "$"을 놓쳤다. –

+1

그것은 무엇이든 등호 뒤에 문자를 맹목적으로 보존합니다. 전형적인 슬래시라고 가정하면 그것이 보존 될 것입니다. 아마도 이것을 설명하는 더 좋은 방법은 등호 다음의 텍스트가 경로명 인 경우/opt/toolchains 위의 모든 상위 디렉토리를 제거하는 것입니다. –