![文字クラス [^[:space:]] を持つ Sed が認識されません。](https://linux33.com/image/11023/%E6%96%87%E5%AD%97%E3%82%AF%E3%83%A9%E3%82%B9%20%5B%5E%5B%3Aspace%3A%5D%5D%20%E3%82%92%E6%8C%81%E3%81%A4%20Sed%20%E3%81%8C%E8%AA%8D%E8%AD%98%E3%81%95%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82.png)
次のように、次の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
sed
GNUと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
```
+
代わりにを使用する*
と*
、すべてと一致します。