1

我想从 Unix 的文件中删除以下字符串:

<?xml version='1.0' encoding='UTF-8'?>

文件内容正是这样的:

<?xml version='1.0' encoding='UTF-8'?>Hello World

在一条连续的线上。

我正在使用以下命令来实现相同的目的:

sed s'/<?xml version='1.0' encoding='UTF-8'?>//g' myFile > myFile1

但是,生成的文件 myFile1 仍然包含该字符串。

如何做到这一点?

4

7 回答 7

4

鉴于它是 XML 声明行,这是文件中的第一行吗?如果是这样,您可以像这样删除第一行:

sed -i "1d" <filename>

-i就地编辑文件,因此将覆盖您的原始文件,而“1d”命令只是删除一行。

但是,如果它不是第一行,或者出现多次,那么你可以使用这个:

sed -i '/\?xml/d' <filename>

再次,它是在原地编辑并使用d命令删除,但这次它是基于正则表达式的删除。您可能希望稍微扩展正则表达式,使其更有针对性,但原则就在那里。

您在评论中说它只是您要删除的一行的一部分,所以在这种情况下:

sed -i "s/<?xml .*?\?>//" <filename>

总结为“将“”之间的所有内容替换为空(有效地删除它)。

于 2013-05-21T07:06:55.183 回答
1

对外部引号使用双引号以避免转义问题:

sed "s/<?xml version='1.0' encoding='UTF-8'?>//g" myFile > myFile1
于 2013-05-21T07:20:51.097 回答
1

如果您在目录中搜索"string",它应该为您提供所有文件中字符串的前 3 次和后 3 次出现,并将其输出到输出文件。

我在用:

grep string path-to-file | head -3 > out.log
grep string path-to-file | tail -3 >> out.log
于 2019-11-08T19:52:34.487 回答
0

sed '/<?xml version='1.0' encoding='UTF-8'?>/d' myfile.

于 2013-05-21T07:08:03.113 回答
0

除了引号的问题,您可以考虑使用grep -v而不是sed

grep -v "<?xml version='1.0' encoding='UTF-8'?>" myFile > myFile1

但是,如果您知道您不想要的行始终是文件中的第一行,那么以下内容就更容易了:

tail -n +2 myFile > myFile1
于 2013-05-21T07:11:07.703 回答
0

sed -e 's/<[^>]*>//g' myfile应该管用

于 2021-08-31T07:51:47.137 回答
0

请找到以下脚本。

sed 's/\<\?xml version\=\'1\.0\' encoding\=\'UTF\-8\'\?\>//g' myfile > myfile_new

想法是注释特殊字符。

于 2016-03-12T16:55:02.767 回答