您的删除语法不正确。要在 sed 中删除,您需要执行以下操作:
sed '(separator) [pattern to delete](separator)d'
因此,例如:
sed -e '/regex/d' infile
这通常用于删除整行。相反,您想要做的是保留该行的某些部分,因此您需要捕获和替换:
sed -e 's/regex-to-drop\(regex-to-keep\)/\1/g' input-file
's' 是替代品,'g' 是全球性的,\( \)
这是捕获的内容,而这\1
是我想要捕获的东西去的地方。如果我有一系列捕获的物品,
\(something\)\(something_else\)
我可以通过简单地将以下内容放在 sed 命令的替换部分中,用它们之间的另一个字符来重现它们:
\1 ;; \2
这将产生:something ;; something_else
并且完全看起来像:
sed -e 's/\(something\)\(something_else\)/\1 ;; \2/g' input-file
在您的情况下,您似乎想在冒号之前删除所有内容:
sed -e 's/^.*:\(.*\)$/\1/g' input-file
@fedorqui 建议的上述脚注:
Sed 使用标准的正则表达式来表示行的开头和结尾,因此“^”表示行的开头,“$”表示行的结尾。因此,对上述内容的完整解释如下:
's/^.*:
从行首到冒号的所有内容(“s”表示我们正在设置“替代”命令)。
然后:
\(.*\)$/
捕获所有内容直到行尾,并且
/\1/g'
用捕获的项目替换整行。全局执行(针对整个文件)。