次のように、次の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
```
+
代わりにを使用する*
と*
、すべてと一致します。