2013-05-21 203 views
1

我想从文件中删除的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仍具有字符串。

如何实现这一目标?

+1

您是否尝试转义引号? – Bernhard

+0

sed s'/ <?xml version = \'1.0 \'encoding = \'UTF-8 \'?> // g'myFile> myFile1 or sed s'/ <\?xml version ='1.0''encoding = \ 'UTF \ -8 \' \?> // g'myFile> myFile1不起作用 – Nik

回答

1

使用双引号外报价,以避免越狱问题:

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

作品! :) 谢谢! – Nik

4

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

sed -i "1d" <filename> 

-i编辑文件的地方,以便将覆盖原始,而“1D”命令简单地删除线。再次

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

,它的编辑到位和使用d命令来删除,但是这一次它的删除:

但是,如果它不是第一行,或出现多次,那么你可以使用这个基于正则表达式。您可能需要扩展正则表达式以便更有针对性,但原则在那里。

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

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

概括为“取代之间的一切‘一无所有’(有效删除。它)

+0

它不是第一个实例,介于两者之间。并且也是连续大字符串的一部分:“<?xml version ='1.0'encoding ='UTF-8'?> Hello World” – Nik

0

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

+0

为什么使用该组? – 2013-05-21 07:08:50

+0

这是行不通的。我的文件包含:“<?xml version ='1.0'encoding ='UTF-8'?> Hello World” - 正是这个字符串 – Nik

+0

将在家中尝试修复。在我的路上:) – xShirase

0

除了与报价的问题,你可以考虑使用grep -v代替sed

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

但是,如果你知道你不想线始终位于文件的第一行,下面是更容易:

tail -n +2 myFile > myFile1 
+0

grep不起作用..我的文件包含:“<?xml version ='1.0'encoding ='UTF-8'?> Hello World” - 正是这个字符串 – Nik

+1

嗯,那不是你写的在你原来的问题中:“我想从Unix中的一个文件中删除下面的*行*”。你没有提到你想要删除的只是*一行的一部分。 – Thomas

+0

对不起!更新了这个问题。 – Nik

0

请找到下面的脚本。

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

想法是评论特殊字符。