UNIX中的SED命令

时间:2013-05-21 06:59:43

标签: unix sed

我想从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仍然具有该字符串。

如何实现这一目标?

6 个答案:

答案 0 :(得分:4)

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

sed -i "1d" <filename>

-i编辑文件,以便覆盖原文,而“1d”命令只删除一行。

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

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

同样,它正在进行编辑并使用{​​{1}}命令进行删除,但这次它是基于正则表达式删除的。您可能希望稍微扩展正则表达式以使其更具针对性,但原则就在那里。

你在评论中说,你只想删除一行的部分,所以在这种情况下:

d

总结为“替换”之间的所有东西“没有任何东西(有效地删除它)。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

我正在使用:

grep string path-to-file | head -3 > out.log
grep string path-to-file | tail -3 >> out.log

答案 3 :(得分:0)

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

答案 4 :(得分:0)

除引号问题外,您可以考虑使用grep -v代替sed

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

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

tail -n +2 myFile > myFile1

答案 5 :(得分:0)

请找到以下脚本。

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

想法是评论特殊字符。