這是我的命令列:
$ cat /etc/hosts | ruby -ne 'print $_.gsub(/$/, %q( xxx ))'
它回傳:
# To allow the same kube context to work on the host and the container: xxx
xxx 127.0.0.1 localhost kubernetes.docker.internal xxx
xxx # End of section xxx
沒想到行首的xxx(第一行沒有)。我需要gsub,因為我需要在實際代碼中匹配其他內容和行尾:(something else|$),這只是顯示預期行為的簡化案例。
總結一下:
- 如何僅匹配行尾?
- 為什么它匹配從第二行開始的行首?
謝謝。
uj5u.com熱心網友回復:
$注意行尾的位置,它位于行尾的后面\n!“替換”它本質上會在 之后添加內容\n,使其顯示在下一行。但是,替換 $ 沒有意義,因為行中總會有一個 $。相反,您想要匹配模式/\r?\n/。
\r 是 chr 13(“回車”)的轉義碼,\n 是 chr 10(換行符)的轉義碼。類 Unix 系統將僅使用 \n 寫入行,而 Windows 系統將使用 \r\n 終止行,因此考慮這兩個字符是理想的。
由于匹配的模式已被替換,但您可能仍想在輸出中保留換行符,我們將匹配的模式包含在輸出中。
cat /etc/hosts | ruby -ne 'print $_.gsub(/\r?\n/, "xxx\\0")'
或者,您可以只替換換行符并使用,puts而不是print在該行回顯到標準輸出時將其添加回來:
cat /etc/hosts | ruby -ne 'puts $_.gsub(/\r?\n/, "xxx")'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/455216.html
標籤:红宝石
