bash에 grep 및 sed 사용

bash에 grep 및 sed 사용

이것은 평가나 성적이 없는 주간 연습입니다(답도 얻지 못했습니다!).

누군가 나에게 이 연습을 설명할 시간이 있다면 정말 감사하겠습니다. 저는 주말에 이 연습을 완료하려고 노력하고 있으며 다음 주까지 교사의 도움을 받을 수 없기 때문입니다. 나는 bash 프로그래밍, 정규 표현식 및 grep에 대해 많은 책을 읽고 작업했습니다. 그러나 아래 코드는 나를 혼란스럽게 합니다.

지침이 불완전하거나 이해가 안 되는 것인지 궁금합니다.

특히 다음 사항으로 인해 전체 내용을 이해하지 못합니다.

NAMES=`ls *.$1`

filed=$(file:$1).$2

연습 4.3
다음 내용이 포함된 텍스트 파일(myfile이라고 함)이 주어졌다고 가정합니다.

#!/bin/bash

NAMES=`ls *.$1`

for file in $NAMES; do
    filed=$(file%:$1).$2
    mv file filed
done

다음 명령을 실행합니다. $ grep ' file ' myfile

 $ grep 'file*' myfile

 $ grep '^ *file*' myfile

 $ grep 'file$' myfile

 $ sed 's/ file* / script /g' myfile

 $ sed ' /for/,/files/d' myfile

 $ sed '/\$[A-Z]..[A-Z]*/d' myfile

그런 다음 출력이나 결과를 해석합니다.

답변1

NAMES=`ls *.$1`

이것은 작업입니다. 변수에 $NAMES값이 할당됩니다. 값은 백틱으로 표시된 명령의 출력으로 처리됩니다( 의 명령 대체 참조 man bash). $1스크립트의 첫 번째 매개변수에 해당하는 특수 매개변수입니다. 따라서 확장명을 인수(예: ./script.sh txt) 로 사용하여 스크립트를 실행해야 하며 ls명령의 출력이 변수에 저장되는 것으로 보입니다.

filed=$(file%:$1).$2

정말 이상해요. 사실, 괄호가 중괄호가 아닌 것이 확실합니까? 그리고 .대신 에 가 있어야 합니다 :.

filed=${file%.$1}.$2

${var%pattern}변수 끝에서 패턴을 잘라냅니다. man bash자세한 내용은 매개변수 확장을 참조하세요. 따라서 이 경우에는 점과 첫 번째 인수에 의해 제공된 확장자를 제거하고 점과 두 번째 인수를 추가합니다.

그런데, 움직이는 라인은 아마도

mv $file $filed

그렇지 않으면 루프를 사용할 이유가 없습니다.

관련 정보