Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 特殊字符删除';sed';_Unix_Sed - Fatal编程技术网

Unix 特殊字符删除';sed';

Unix 特殊字符删除';sed';,unix,sed,Unix,Sed,我面临着一个问题,我在beggining的文件中有一些特殊的字符;下面是相同的快照: ^@<9b>200931350515,test1,910,420032400825443 ^@<9a>200931350515,test1,910,420032400825443 ^@<9d>200931746996,test2,910,420031390086807 在这方面没有成功。顺便说一句,该文件是在从Teradata快速导出的过程中创建的,该过程会在提取过程中自行

我面临着一个问题,我在beggining的文件中有一些特殊的字符;下面是相同的快照:

^@<9b>200931350515,test1,910,420032400825443
^@<9a>200931350515,test1,910,420032400825443
^@<9d>200931746996,test2,910,420031390086807
在这方面没有成功。顺便说一句,该文件是在从Teradata快速导出的过程中创建的,该过程会在提取过程中自行添加一些特殊字符


你知道这个命令吗

sed
对于这样一个小问题来说是个大麻烦, 使用
cut
删除每行的开头:

cut -b 2- file.dat

2-
是你想要保留的字节范围时,我不确定你有多少这样奇怪的字符,所以我会尝试
1-
2-
3-
4-
5-
,等等。

sed
是解决这样一个小问题的大炮, 使用
cut
删除每行的开头:

cut -b 2- file.dat

如果
2-
是您想要保留的字节范围,我不确定您有多少这样奇怪的字符,所以我会尝试
1-
2-
3-
4-
5-
,等等。

看起来应该删除的字符数在所有行中都是恒定的。要从每行开头删除固定数量的字符,只需执行以下操作

$ sed 's/^.....//' input >output

调整点数以满足您的需要。

看起来应该删除的字符数在所有行中都是恒定的。要从每行开头删除固定数量的字符,只需执行以下操作

$ sed 's/^.....//' input >output
根据需要调整点数。

使用perl

perl -lne 'print /\d+,.*/g'

200931350515,test1,910,420032400825443
200931350515,test1,910,420032400825443
200931746996,test2,910,420031390086807
只匹配第一个逗号之前的数字,然后匹配其他所有数字。

使用perl

perl -lne 'print /\d+,.*/g'

200931350515,test1,910,420032400825443
200931350515,test1,910,420032400825443
200931746996,test2,910,420031390086807

只匹配第一个逗号之前的数字,然后匹配其他所有字符。

如果要删除行中任何位置的非ASCII字符,可以使用
tr

tr -d '\000\200-\377' <file >file.new
tr-d'\000\200-\377'file.new

如果要删除行中任何位置的非ASCII字符,可以使用
tr

tr -d '\000\200-\377' <file >file.new
tr-d'\000\200-\377'file.new

它是否总是为每行添加相同数量的字符?同样,为上述行获得十六进制输出(例如使用
xxd
)也很好。它是否总是为每行添加相同数量的字符?同样,为上述行获得十六进制输出也很好(例如使用
xxd
)我希望能在否决票的情况下发表评论。字符位于每行的开头,并且似乎在每行上都是相同的。我的答案中的
sed
脚本将从每行开头删除字符。这有什么问题吗?很抱歉,我应该多提一些特殊字符长度可变的唱片。对于恒定长度,它是有效的。谢谢我希望能在否决票的情况下发表评论。字符位于每行的开头,并且似乎在每行上都是相同的。我的答案中的
sed
脚本将从每行开头删除字符。这有什么问题吗?很抱歉,我应该多提一些特殊字符长度可变的唱片。对于恒定长度,它是有效的。谢谢谢谢@krzyk。我应该提到创建的文件很大(>500GBs)。此外,添加的字符数不是恒定的。有些行只有4行,有些行只有6行,有些行只有3行。因此,削减并不是一个更好的选择;对于大型文件来说,这也是不可行的。即使是sed也需要时间处理如此庞大的文件。例如:对于439GB文件,同样类型的操作需要4个小时。
cut
在这种情况下比
sed
快,但是是的,当字符数可变时(通常如果您有较大的文件,您希望在不需要时避免正则表达式)。另一个好的选择是
tr
TripleeThank@krzyk的回答。我应该提到创建的文件很大(>500GBs)。此外,添加的字符数不是恒定的。有些行只有4行,有些行只有6行,有些行只有3行。因此,削减并不是一个更好的选择;对于大型文件来说,这也是不可行的。即使是sed也需要时间处理如此庞大的文件。例如:对于439GB文件,同样类型的操作需要4个小时。
cut
在这种情况下比
sed
快,但是是的,当字符数可变时(通常如果您有较大的文件,您希望在不需要时避免正则表达式)。另一个好的选择是由triplee回答