如何在文件中删除此字符串

时间:2015-01-17 02:44:43

标签: unix sed

我想删除文件中的字符串,我要删除的字符串是 “/package/myname:”。我尝试使用sed来做到这一点,但不能。 请注意,字符串末尾有一个“/”,字符串末尾有“:”,我不知道如何处理。

e.g。我可以使用

删除“package/myname
echo 'diff a/package/myname:/src/com/abc' | sed -e 's/\<package\/myname\>//g'

但是当我跑步时:

echo 'diff a/package/myname:/src/com/abc' | sed -e 's/\<\/package\/myname\:\>//g'

结果不会取代任何东西。

在我的情况下删除“/ package / myname:”的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

<强>问题:

echo 'diff a/package/myname:/src/com/abc' | sed -e 's/\<\/package\/myname\:\>//g'
                                                       ^                    ^
                                                       |                    |     

问题主要是因为两个字的边界。

\< - 在非单词字符和单词字符之间匹配的边界。

\> - 在单词字符和单词字符以及非单词字符之间匹配的边界。

所以在第一种情况下,

echo 'diff a/package/myname:/src/com/abc' | sed -e 's/\<package\/myname\>//g'

\<字符串前的package/(非单词字符)和p(单词字符)之后的边界相匹配。同样,\>匹配e(单词字符)和:(非单词字符)之间存在的边界。所以最后会发生匹配,匹配的字符将被空字符串替换。

但在第二种情况下,

echo 'diff a/package/myname:/src/com/abc' | sed -e 's/\<\/package\/myname\:\>//g'

\<无法匹配a和正斜杠/之间存在的边界,因为\<仅匹配非单词字符( left )和一个单词字符( right )。同样,\>无法匹配:/正斜杠之间存在的边界,因为左侧没有单词字符,右侧没有非单词字符。

<强>解决方案:

因此,我建议您删除边界<\/>。或者,你可以这样做,

$ echo 'diff a/package/myname:/src/com/abc' | sed -e 's/\>\/package\/myname\://g'
diff a/src/com/abc

我想现在你可以找出上述命令的工作原因。

答案 1 :(得分:1)

sed 's%/package/myname:%%g'

使用%代替/来标记替换命令各部分的结尾。您可以使用字符串中未出现的任何字符。使用 Control-A 作为分隔符非常有效。

你也可以使用:

sed 's/\/package\/myname://g'

但是当我有一种简单的方法可以避免它们时,我宁愿避免使用反斜杠。

答案 2 :(得分:1)

 sed -i "s/\/package\/myname\://g;" [__YOUR_FILE_NAME__]

删除了短语。

不会删除该行。

grep -v  # removes the line