如何从文本文件中删除控制字符

时间:2016-12-21 11:37:09

标签: linux perl awk grep

我有一个文件,我需要从中提取所有控制字符,但我无法理解发生了什么。

$ cat -v -e -t values.xml | head -n 10
<?xml version="1.0" encoding="UTF-8"?>^M$
^I^I^I<HHDGSID>1</HHDGSID>^M$
^I^I^I<SEHJJE>1</SEHJJE>^M$
^I^I^I<ADRTYPE>0</ADRTYPE>^M$
^I^I^I<TESTJGHJTE>30/10/2000</TESTJGHJTE>^M$

当我搜索[:cntrl:]个字符时,我会收到类似l的字母 在下面一行:

<?xml version="1.0" encoding="UTF-8"?>^M$

我该如何处理?

以下是my file的示例:

<?xml version="1.0" encoding="UTF-8"?>
            <SOME>1</SOME>
            <SOMEEXTRA>1</SOMEEXTRA>
            <ADRTYPE>0</ADRTYPE>
            <SOMEEXTRADATE>30/10/2000</SOMEEXTRADATE>
            <SOMEEXTRACDATE>30/10/2000</SOMEEXTRACDATE>
            <CODE>0</CODE>
            <CEBY>1</CEBY>
        </ORD>

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

while (<>) {
   s/\cX//g; # removes ^X's
   s/\cI//g; # removes ^I's
   ...  
}

答案 1 :(得分:0)

  

当我搜索[:cntrl:]个字符时,会收到类似 l 的字母   在下面的行中:

<?xml version="1.0" encoding="UTF-8"?>^M$

man 7 regex说:

  

在方括号表达式中,包含在其中的字符类的名称          “ [:”和“:]”代表属于该字符的所有字符的列表          课。

因此,由于[:cntrl:]必须在括号表达式内 ,因此您必须搜索[[:cntrl:]]

[:cntrl:]就是一个括号表达式,它与列表中的任何单个字符匹配 :cn,{{ 1}},tr,因此与l中的l相匹配。