我的文件包含以下格式的几十行:
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
我确定我正在对某些事情或语法错误做出假设,但我相信很多人都会发现很难发现错误。
谢谢。
答案 0 :(得分:1)
sed -i 's+source \.*/[^/]*/++' TARGETFILE
删除任何前导点,斜杠,路径组件和斜杠。
使用+
代替/
作为分隔符,可以更轻松地匹配/
。
\.*
匹配一系列点。 [^/]
匹配/
以外的任何内容。
sed 's+source \.*/[^/]*/++' <<EXAMPLE
source ../foo/bar
source ..../baz/fop
source /buzz/this/that
EXAMPLE
结果
bar
fop
this/that
答案 1 :(得分:1)
要删除具有模式source ../.*/
的行,您只需在d
中使用sed
命令:
sed -i.bak '\~source \.\./[^/]*/~d' file
使用grep
,您可以避免使用regex
:
grep -vF 'source ../' file