文字クラス [^[: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}

表情が一致しているから若い3つのバックティックの後に空白以外の文字が1つ以上表示されます。強制一致[^[: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
```
  • +代わりにを使用する**、すべてと一致します。

関連情報