我使用 GNU SED 來尋找和取代大檔案(最大 2GB)的功能。
尋找和替換字符可以包含任何字符,因此我希望查找和替換參數被視為純文字。
我不想透過 sed 命令將查找或取代參數視為正規表示式。
我已經嘗試了很多,但每次我都會得到新的正規表示式組合,這不適用於 sed 作為純文字。
如何才能實現這個目標?
有什麼公式可以轉義特殊字元嗎?
注意:我使用~
運算子作為命令分隔符號而不是/
下面是例子
sed -ne "s~^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$~Replace" -ne "w output.txt" "input.txt"
上面的命令不起作用,因為它將 find 參數視為正規表示式(因為它是正規表示式)。因此,要找到文本,我必須轉義正則表達式中的一些特殊字符,如下所示
sed -ne "s~\^\[-+\]?\[0-9\]\*\\.?\[0-9\]+(\[eE\]\[-+\]?\[0-9\]+)?\$~Replace" -ne "w output.txt" "input.txt"
在另一個範例中,我必須修改.*$
為.\*\$
“但(.*$)
我不想修改輸入”。
那麼轉義序列有什麼通用規則嗎?
答案1
問:有什麼公式可以轉義特殊字元嗎?
問:轉義序列有什麼通用規則嗎?
A:您可以對特殊字元使用對應的十六進位代碼,以防僅鍵入/
、.
、*
、?
、$
等變得煩人。例如:
sed -rn '/\x22/p' file
將列印包含雙引號的行,因為\x22
代表"
.
如果您需要尋找十六進位代碼,可以使用以下命令方便地將它們全部保存到文件中:
gawk 'BEGIN{for(i=0;i<255;i++){printf("%d\t%x\t%c\n", i,i,i)}}' null >chars.txt