【问题标题】:using sed to remove special chars and add spaces instead使用 sed 删除特殊字符并添加空格
【发布时间】:2014-02-18 17:28:43
【问题描述】:

我有一段文字想要修改:

^@^A^@jfits^@^A^@pin^@^A^@sadface^@^A^@secret^@^A^@test^@^A^@tools^@^A^@ttttfft^@^A^@tty^@^A^@vuln^@^A^@yes^@^

使用 sed 我想删除所有带有几个空格的^@^A^(以及这些字符的变体)。

我试过了:

cat -A file | sed 's/\^A\^\@/  /'

但这显然是错误的,有人可以帮忙吗?

【问题讨论】:

    标签: sed


    【解决方案1】:

    如果您可以枚举允许的字符,那么您可以执行类似的操作

    sed -e 's/[^a-zA-Z0-9]/ /g' 
    

    这会将字母数字字符集中的所有替换为空格。

    如果您只想用空格替换所有“不可打印”字符,那么您可以使用字符类[1] with

    sed -e 's/[^[:print:]]/ /g'
    

    虽然一些旧版本的 sed 可能不支持这种语法,但它在 unix 规范中是标准化的,所以你不应该因为使用它而感到内疚。[2]

    [1]http://sed.sourceforge.net/sedfaq3.html

    [2]http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_03

    【讨论】:

    • 糟糕。抱歉,试图修复我的 vim/chrome 集成我似乎打破了前导空格。固定。
    【解决方案2】:

    看起来^A 不是两个字符,实际上只是一个控制字符。所以你应该写类似\x01的东西。

    不管怎样,有三个字符范围,\x00-\x1f 是控制字符,\x20-\x7f 是 ascii,还有一些是……取决于编码。

    我不太了解 sed,但如果你只想要 ascii,我会在 perl 中这样做:

    head /dev/urandom | perl -pe 's/[^\x20-\x7f]/ /gi'

    【讨论】:

      【解决方案3】:

      如果只替换^A和^@,可以这样:

      sed 's/[\x01\x0]/ /g' file
      

      然后我在已经讨论过的 SO 中找到了更多类似的答案。

      https://superuser.com/questions/75130/how-to-remove-this-symbol-with-vim

      Replacing Control Character in sed

      【讨论】:

        猜你喜欢
        • 2020-03-16
        • 1970-01-01
        • 1970-01-01
        • 2015-03-12
        • 2022-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多