我想从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仍然具有该字符串。
如何实现这一目标?
答案 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
想法是评论特殊字符。