Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Bash 如何正确使用sed从文件中删除字符?-无效的反向引用_Bash_Sorting_Unix_Sed_Cygwin - Fatal编程技术网

Bash 如何正确使用sed从文件中删除字符?-无效的反向引用

Bash 如何正确使用sed从文件中删除字符?-无效的反向引用,bash,sorting,unix,sed,cygwin,Bash,Sorting,Unix,Sed,Cygwin,在过去的几天里,我一直在尝试在Windows7上使用Cygwin在文本文件上执行Zipf定律实验。我一解决一个问题,另一个问题似乎就出现了。如果您想了解我遇到的其他问题的背景信息,请参阅下面的其他问题: 当我尝试对文本文件使用以下排序命令时: sort <m.txt | uniq -c | sort -nr >m.dict 我相信这是由于\342字符(以及其他几个字符,我也看到它显示\357)。据我所知,\ 342是一个“不可见”的不可打印字符 我正在尝试使用sed(只需遵循在

在过去的几天里,我一直在尝试在Windows7上使用Cygwin在文本文件上执行Zipf定律实验。我一解决一个问题,另一个问题似乎就出现了。如果您想了解我遇到的其他问题的背景信息,请参阅下面的其他问题:

当我尝试对文本文件使用以下排序命令时:

sort <m.txt | uniq -c | sort -nr >m.dict 
我相信这是由于\342字符(以及其他几个字符,我也看到它显示\357)。据我所知,\ 342是一个“不可见”的不可打印字符

我正在尝试使用sed(只需遵循在线教程,我以前从未使用过它)通过以下命令删除这些字符:

sed 's/'`echo "\342"`'//g' m.txt

但是,这两个命令都给了我相同的错误:

sed: -e expression #1, char 10: Invalid back reference

如何正确使用sed删除这些麻烦的不可打印字符?

使用sed的语法是

LC_ALL=C sed's/'$'\342'//g'


(在将字符代码传递给sed之前,使用bash
$“…”
引用来解释字符代码)。

使用
sed的语法将是

LC_ALL=C sed's/'$'\342'//g'


(在将字符代码传递给sed之前,使用bash
$“…”
引用来解释字符代码)。

删除具有第8位集的所有字符的更好方法是

tr -d '\200-\377' m.txt > m-no-8bit.txt

使用第8位集删除所有字符的更好方法是

tr -d '\200-\377' m.txt > m-no-8bit.txt
这可能适用于您(GNU-sed):

要删除八进制值
342
请使用
\o342

这可能适用于您(GNU-sed):


要删除八进制值
342
请使用
\o342

我不确定sed是否是正确的工具,但要解决backref问题,可以这样引用:
sed-e's/'“$(echo\“\342\””//g'm.txt
,也许它应该是
echo-e
?也许删除第8位字符集的所有字符的更好方法是
tr-d'\200-\377'
@Jens我之前在摆弄tr,这是可能的,但它会将每一行回音到cygwin中的控制台(这需要一段时间,有1000行),我可以在没有回音的情况下使用它吗?我会使用您的命令“tr-d”\200-\377“m.txt”吗?@hjalmig,您只需要将
tr
输出重定向到一个文件,例如
tr…>m-sanitized.txt
@Jens谢谢,使用你发布的内容,我已经解决了我的问题!如果你想把它变成一个答案,我会在通过2d限制后将问题标记为已解决。我不确定sed是否是正确的工具,但要解决backref问题,你可以这样引用:
sed-e的/“$(echo\“\342\”””//g'm.txt
,也许它应该是
echo-e
?也许删除第8位字符集的所有字符的更好方法是
tr-d'\200-\377'
@Jens我之前在摆弄tr,这是可能的,但它会将每一行回音到cygwin中的控制台(这需要一段时间,有1000行),我可以在没有回音的情况下使用它吗?我会使用您的命令“tr-d”\200-\377“m.txt”吗?@hjalmig,您只需要将
tr
输出重定向到一个文件,例如
tr…>m-sanitized.txt
@Jens谢谢,使用你发布的内容,我已经解决了我的问题!如果你想把它变成一个答案,我会在通过2d限制后将问题标记为已解决。第8位集是什么意思?@Prometheus第8位集表示128到255之间的所有值,即八进制200到377(这是“麻烦的不可打印字符”).你知道二进制数字系统吗?显然不知道。第8位是什么意思?@Prometheus第8位是指128到255之间的所有值,即八进制200到377(这是“麻烦的不可打印字符”)。你知道二进制数字系统吗?显然不知道。
tr -d '\200-\377' m.txt > m-no-8bit.txt
sed 's/\o342//g' file