如何删除文件中的这个字符串

How to remove this string in file

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

例如我能够使用以下方法删除“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:”的正确方法是什么?

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

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

您还可以使用:

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

但我更愿意避免乱用反斜杠,因为有一种简单的方法可以避免它们。

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

删除短语。

不删除行。

grep -v  # removes the line

问题:

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

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