Final.txt는 다음과 같습니다.
build/create_changes.sh
build/create_changes.sh-meta.xml
src/aura/camping/camping.design
src/aura/camping/camping.design-meta.xml
코드는 다음과 같습니다.
if [ -e final.txt ]
then
ARRAY=()
while read CFILE
do
echo Analyzing file `basename $CFILE`
case "$CFILE"
in
*.design) TYPENAME="AuraDefinitionBundle";;
*) TYPENAME="UNKNOWN";;
esac
if [ "$TYPENAME" == "AuraDefinitionBundle" ]
then
if [ $(contains "${ARRAY[@]}" $(basename -- "$(dirname -- "$CFILE")")) != "y" ]
then
echo baseFile from new method cFile $CFILE
CFILENAME="$CFILE"
replace="src/aura/"$(basename -- "$(dirname -- "$CFILE")")
echo checkChanges "${CFILENAME/$CFILENAME/"$replace"}"
CFILE="${CFILENAME/$CFILENAME/"$replace"}"
echo baseFile from after change method cFile $CFILE
else
continue
fi
fi
done < final.txt
else
echo Change file not found!
에코 창에서 다음을 볼 수 있습니다.
[exec] baseFile from new method cFile src/aura/camping/camping.design
[exec] checkChanges src/aura/camping
[exec] baseFile from after change method cFile src/aura/camping
그러나 파일은 변경되지 않았습니다. sed
명령을 추가했지만 출력은 변경되지 않았습니다.
if [ $(contains "${ARRAY[@]}" $(basename -- "$(dirname -- "$CFILE")")) != "y" ]
then
CFILENAME="$CFILE"
ARRAY+=($(basename -- "$(dirname -- "$CFILE")"))
replace="src/aura/"$(basename -- "$(dirname -- "$CFILE")")
#CFILE="${CFILENAME/$CFILENAME/"$replace"}"
sed -i 's/$CFILENAME/$replace/' final.txt
else
continue
fi
예상 입력
build/create_changes.sh
build/create_changes.sh-meta.xml
src/aura/camping/camping.design
src/aura/camping/camping.design-meta.xml
예상 출력
build/create_changes.sh
build/create_changes.sh-meta.xml
src/aura/camping
src/aura/camping/camping.design-meta.xml
답변1
나는 당신의 논리를 따를 수 있을지 확신하지 못하지만, 이것은
awk '/\.design$/ {sub("/[^/]*$", "")} 1 ' file
build/create_changes.sh
build/create_changes.sh-meta.xml
src/aura/camping
src/aura/camping/camping.design-meta.xml
원하는 출력을 생성합니다 ...
답변2
basename으로 끝나는 모든 경로 이름을 제거하려면 다음을 수행하십시오 .design
.
sed 's#/[^/]*\.design$##' final.txt
내부 편집을 수행하려면 sed -i
위의 표현식을 사용하십시오(플래그는 약간 다르게 작동 -i
하지만 이는 GNU sed
등에 적용됩니다).
정규 표현식은 줄 끝의 문자 가 아닌 문자와 리터럴 문자열이 뒤따르는 문자열 /[^/]*\.design$
과 일치합니다 ./
/
.design