Bash 如何正确使用sed从文件中删除字符?-无效的反向引用
在过去的几天里,我一直在尝试在Windows7上使用Cygwin在文本文件上执行Zipf定律实验。我一解决一个问题,另一个问题似乎就出现了。如果您想了解我遇到的其他问题的背景信息,请参阅下面的其他问题: 当我尝试对文本文件使用以下排序命令时: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(只需遵循在
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