2015-10-05 65 views
1

我有一个小数据集就像一个下面包含<文件名中>:删除在每一行的注释(如果存在)

##standby!##hellow how are you1 
##standby!##hellow how are you2 
#how do you do 
##standby!##hellow how are you4 
am good jane 
##standby!##hellow how are you5 

现在我要检查,如果字符串##standby!##存在和发生任何给定行的开始,如果它确实删除它。

如果字符串##standby!##在该行的开始处不可用,则跳过该行并继续执行该文件的其余部分。

我尝试这样做:

sed '/^#/ d' <filename> 

任何帮助将不胜感激。

回答

1

你不妨使用orde中符合sed的POSIX兼容参数R键可移植使用此命令跨平台:-efn通过POSIX sed支持

sed 's/^##standby!##//g' file > newfile 

只有选项。

1

您可以简单地使用:

sed -i.bak 's/^##standby!##//' file 
hellow how are you1 
hellow how are you2 
#how do you do 
hellow how are you4 
am good jane 
hellow how are you5 

^##standby!##将匹配在启动模式和替代只是一个空字符串。 -i.bak用于内联编辑。

+0

我觉得你必须跳过'好jane':如果在该行的开始处没有## standby!##这个词,则跳过该行并继续执行文件的其余部分。 –

+1

看来OP打算删除包含'## standby!##'的每一行。我的第二个理解是删除像你这样的词,但不要处理(意味着删除)'好的简洁'这一句。当然,只有OP知道他真正想要的东西。干杯。 – alvits

+0

@RajMullapu:如果这不能解决您的问题,那么您应该澄清这些问题并提供您的预期输出。 – anubhava

0

perl -pe 's/##standby\!##//g' filename

产生这样的输出:

hellow how are you1 
hellow how are you2 
#how do you do 
hellow how are you4 
am good jane 
hellow how are you5 

-p遍历每一行,处理
-e后打印出来执行Perl代码
s/foo/bar/g替代