Sed
帶有字元類的 Sed[:space:[:sp一種C和:^[:space:] 沒有得到認可
我使用以下
sed
字元類[^[:space:]]
如下:orig="(\`\`\`)([^[:space:]]*)"; new="\1{.\2 .numberLines startFrom=\"1\" .lineAnchors}"; sed -i -r -e "s|${orig}|${new}|g" ${InterimFilePath} ;
輸入:
```bash ls
輸出:
ls ```{.bash .numberLines startFrom="1" .lineAnchors}
預期輸出:
```{.bash .numberLines startFrom="1" .lineAnchors} ls
有什麼建議麼?我也嘗試了字元類`[[:alnum:]]`,但結果與上面相同。
我用 GNU
sed
和sed
OpenBSD 上的本機得到的輸出是```{.bash .numberLines startFrom="1" .lineAnchors} ls ```{. .numberLines startFrom="1" .lineAnchors}
這是因為您的表達式匹配三個反引號後的零個或多個非空格字元。更改
[^[:space:]]*
為[^[:space:]]+
將強制匹配至少一個非空格字元。這給出了預期的輸出
```{.bash .numberLines startFrom="1" .lineAnchors} ls
--- 您也可以在變數賦值中使用單引號。這使得字元串看起來更整潔,而無需轉義特殊字元以保護它們免受 shell 的影響:
orig=’(```)([^[:space:]]+)' new=’\1{.\2 .numberLines startFrom=“1” .lineAnchors}' sed -i -E “s|$orig|$new|g” “$InterimFilePath”