替换主要由元字符组成的字符串
Replacing string consisting of mostly metacharacters
我有一个包含几十行格式的文件:
source ../foo/bar
source ../foo1/bar1
source ../foo2/bar2
etc
我一直困惑于使用 sed 找到 source ../foo/
部分并将其替换为任何内容以将其删除。我一直在阅读 this very helpful post on the unix/linux Stack Exchange 关于转义元字符的内容,结果正则表达式是:
source \.\.\/\.\*?\/
按照该帖子的说明,我的完整 sed 如下所示:
sed -i 's/source \.\.\/\.\*?\///' TARGETFILE
命令完成且没有错误,但文件未受影响。我也试过:
sed -i 's/source \.\.\/\.\*?\//''/' TARGETFILE
我确定我是在假设某些东西或语法错误,但我相信你们中的许多人都能理解发现错误的难度。
谢谢。
sed -i 's+source \.*/[^/]*/++' TARGETFILE
删除任何前导点、斜杠、路径组件和斜杠。
使用 +
而不是 /
作为定界符可以更简单地匹配 /
.
\.*
匹配一系列点。 [^/]
匹配除 /
.
之外的任何内容
sed 's+source \.*/[^/]*/++' <<EXAMPLE
source ../foo/bar
source ..../baz/fop
source /buzz/this/that
EXAMPLE
结果
bar
fop
this/that
要删除那些具有模式 source ../.*/
的行,您可以在 sed
中使用 d
命令:
sed -i.bak '\~source \.\./[^/]*/~d' file
使用grep
你可以避免使用regex
:
grep -vF 'source ../' file
我有一个包含几十行格式的文件:
source ../foo/bar
source ../foo1/bar1
source ../foo2/bar2
etc
我一直困惑于使用 sed 找到 source ../foo/
部分并将其替换为任何内容以将其删除。我一直在阅读 this very helpful post on the unix/linux Stack Exchange 关于转义元字符的内容,结果正则表达式是:
source \.\.\/\.\*?\/
按照该帖子的说明,我的完整 sed 如下所示:
sed -i 's/source \.\.\/\.\*?\///' TARGETFILE
命令完成且没有错误,但文件未受影响。我也试过:
sed -i 's/source \.\.\/\.\*?\//''/' TARGETFILE
我确定我是在假设某些东西或语法错误,但我相信你们中的许多人都能理解发现错误的难度。
谢谢。
sed -i 's+source \.*/[^/]*/++' TARGETFILE
删除任何前导点、斜杠、路径组件和斜杠。
使用 +
而不是 /
作为定界符可以更简单地匹配 /
.
\.*
匹配一系列点。 [^/]
匹配除 /
.
sed 's+source \.*/[^/]*/++' <<EXAMPLE
source ../foo/bar
source ..../baz/fop
source /buzz/this/that
EXAMPLE
结果
bar
fop
this/that
要删除那些具有模式 source ../.*/
的行,您可以在 sed
中使用 d
命令:
sed -i.bak '\~source \.\./[^/]*/~d' file
使用grep
你可以避免使用regex
:
grep -vF 'source ../' file