문자 클래스 [^[:space:]]가 있는 Sed가 인식되지 않습니다.

문자 클래스 [^[:space:]]가 있는 Sed가 인식되지 않습니다.

아래와 같이 다음 sed문자 클래스를 사용합니다.[^[:space:]]

orig="(\`\`\`)([^[:space:]]*)"; 
new="\1{.\2 .numberLines startFrom=\"1\" .lineAnchors}"; 
sed -i -r -e "s|${orig}|${new}|g" ${InterimFilePath} ; 

입력하다:

```bash
ls
```

산출:

```{.bash .numberLines startFrom="1" .lineAnchors}
ls
```{.bash .numberLines startFrom="1" .lineAnchors}

예상 출력:

```{.bash .numberLines startFrom="1" .lineAnchors}
ls
```

어떤 제안이 있으십니까? 캐릭터 클래스도 시도해 보았지만 [[:alnum:]]결과는 위와 같습니다.

답변1

sedGNU 및 OpenBSD에서 기본을 사용하여 얻은 출력은 sed다음과 같습니다.

```{.bash .numberLines startFrom="1" .lineAnchors}
ls
```{. .numberLines startFrom="1" .lineAnchors}

표정이 일치해서 그런가백틱 세 개 뒤에 공백이 아닌 문자가 하나 이상 나옵니다. 강제 일치 [^[:space:]]*로 변경[^[:space:]]+마지막 하나공백이 아닌 문자.

이것은 예상되는 출력을 제공합니다

```{.bash .numberLines startFrom="1" .lineAnchors}
ls
```

변수 할당에 작은따옴표를 사용할 수도 있습니다. 이렇게 하면 셸에서 문자열을 보호하기 위해 특수 문자를 이스케이프 처리할 필요 없이 문자열이 더 깔끔하게 보입니다.

orig='(```)([^[:space:]]+)'
new='\1{.\2 .numberLines startFrom="1" .lineAnchors}'
sed -i -E "s|$orig|$new|g" "$InterimFilePath"

답변2

이 시도,

orig="(\`\`\`)([[:alnum:]]+)";
new="\1{.\2 .numberLines startFrom=\"1\" .lineAnchors}"; 
sed -i -r -e "s|${orig}|${new}|g" ${InterimFilePath} ; 

산출

```{.bash .numberLines startFrom="1" .lineAnchors}
ls
```
  • +대신 을 사용 *하면 *모든 것과 일치합니다.

관련 정보