grep과 sed를 사용한 bash

grep과 sed를 사용한 bash

이것은 주간 연습을 위한 것이며 채점이나 성적이 없습니다(답도 얻지 못했습니다!).

저는 이 작업을 주말에 끝내려고 노력 중이고 다음 주까지는 강사로부터 도움을 받을 수 없기 때문에 누구든지 저에게 이 운동을 설명할 시간이 있다면 정말 감사하겠습니다. 나는 bash 프로그래밍, regex 및 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

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

관련 정보