debug: Debug
내 bashscript에서 Sed가 파일을 살펴보고 ${SourceP}
발견되면 해당 줄을 제거하고 환경으로 내보내기를 원합니다.Debug=Debug
sed -i '/debug: Debug/,+0 d' ${SourceP} && export Debug=Debug
하지만 아쉽게도 Debug=Debug
패턴을 찾지 못하더라도 내보내기가 됩니다.
이를 달성하는 방법: Debug=Debug
패턴이 발견된 경우에만 행을 내보내고 삭제합니다.
sed를 사용할 수 없나요?
나는 이것을 시도했지만 awk
그 중 하나도 작동하지 않습니다.
awk -i inplace '!/debug: Debug/' ${SourceP} && export Debug=Debug
편집: 정확하게 검색할 수 있었으면 좋겠습니다 debug: Debug
.
답변1
awk
어떻게든 부품에서 정보를 추출 해야 합니다 . 변수를 내보내거나 사용할 수 있습니다.종료 상태.
awk -i inplace 'BEGIN {err = 1}; {if (NR == 1 && /([[:space:]]|^)debug: Debug([[:space:]]|$)/) {err = 0} else {print}}; END {exit err}' ${SourceP} && export Debug=Debug
설명하다
BEGIN {err = 1}
: 처음에는 오류 상태를 1로 설정합니다.- 그런 다음 첫 번째 행에 있고
NR == 1
해당 행에&&
오류가 있는 경우/([[:space:]]|^)debug: Debug([[:space:]]|$)/
오류 상태를 0(err = 0
)으로 설정합니다. 그렇지 않으면 다른 모든 줄을 인쇄합니다. 이 정규식은debug: Debug
공백이나 줄의 시작으로 시작하고 공백이나 줄의 끝으로 끝납니다. - 스크립트가 끝나면
awk
오류 상태로 종료됩니다{exit err}
. - 따라서
/debug: Debug/
해당 파일에서 발견되면 에러 상태가 0이 되어&&
실행됩니다.
답변2
test "$(sed -i -e '/debug: Debug/{w /dev/fd/1' -e 'd}' "$SourceP")" && export Debug=Debug
노트:
글은 ${SourceP}
순수한 가식입니다. 그것은 단순함만큼이나 위험합니다 $SourceP
. 당신이 원하는인용하다다음으로 변경하십시오: "$SourceP"
또는 "${SourceP}"
.
/dev/fd/1
대부분의 최신 Unix에서 지원되며 GNU 전용이며 이식성이 매우 낮습니다 sed -i
.awk -i