沒有正規表示式的 sed

沒有正規表示式的 sed

我使用 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

相關內容