如何从我的文本文件中删除这些类型的代码:\u003c/p\u003e\n\u003cp\u003e?我尝试了 sed,但由于反斜杠,它不能很好地工作

如何从我的文本文件中删除这些类型的代码:\u003c/p\u003e\n\u003cp\u003e?我尝试了 sed,但由于反斜杠,它不能很好地工作

如何从我的文本文件中删除这些类型的代码:\u003c/p\u003e\n\u003cp\u003e?我尝试了 sed,但由于反斜杠,它不能很好地工作。

答案1

在大多数带引号字符串的语法中,标点字符之前的反斜杠代表该标点字符,而不是让标点字符具有其通常的特殊效果。特别是,两个反斜杠代表一个反斜杠。反斜杠后跟字母或数字通常起到相反的作用:它使字符具有特殊效果。

将 sed 代码放在单引号中'…'以防止 shell 扩展。如果您需要在 sed 代码中使用单引号,请使用'\''(quote-backslash-quote-quote:第一个引号终止单引号段,然后有一个引号字符按字面解释,因为它前面有一个反斜杠,并且最后一个引号开始一个新的单引号段)。

如果需要替换少量反斜杠序列,Sed 是一个很好的工具。在 seds命令中,使用双反斜杠代表反斜杠。s对每个反斜杠序列使用连续的命令。将双反斜杠转换为反斜杠的转换放在最后,这样生成的反斜杠本身就不会被替换。在这里,在最后一个命令中,我用来.代表正则表达式中的任何字符,\(.\)使其成为一个编号组(请注意,这里反斜杠导致括号变得特殊:这是基本正则表达式语法sed 使用的),并\1代表替换文本中的该组。

sed -e 's/\\u003c/</g; s/\\u003e/>/g; s/\\n/\n/g; s/\\\(.\)/\1/'

或者,要转换 后具有任意数字的反斜杠序列\u,您可以使用 Perl。 Perl 有一个s操作员这与 sed 的s命令类似,但带有一个正则表达式语法略有不同并且替换允许编写 Perl 代码。

perl -pe 's/\\u([0-9a-f]{4})/chr($1)/eg; s/\\n/\n/g; s/\\(.)/$1/g'

答案2

这些字符属于<>HTML(或类似)标签。您可以删除它们,但我建议您先转换它们,以保留文件结构,然后在不需要时尝试删除它们。

根据您输入的大小,您可以这样做:

$ echo -e ($cat encodedfile.txt) > decodedfile.txt

对于更大的文件,应该这样做:

$ cat encodedfile.txt | while read -r a; do echo -e $a; done > decodedfile.txt

相关内容