使用 sed 删除文件中的破折号

使用 sed 删除文件中的破折号

我想使用 sed 命令来删除字符串(文件内部)中的一些破折号,即文件有一行内容:

TEXT=abcdef-lalala-someText-yahoo

sed 执行后,该行应如下所示:

TEXT=abcdeflalalasomeTextyahoo

提前致谢

答案1

根据您对Nifle 的答案,也许这更像你在寻找的。它只会对包含以下内容的行起作用TEXT=4'-' 分隔的文本段。

使用 GNU sed(将“TEXT”和“yahoo”视为常量)

sed -re 's/^(TEXT=[^-]+)-([^-]+)-([^-]+)-(yahoo)$/\1\2\3\4/'

或者,使用 GNU sed (将“=”之后的所有文本视为可变量)

sed -re 's/^(TEXT=[^-]+)-([^-]+)-([^-]+)-([^-]+)$/\1\2\3\4/'

或者,为了实现 posix 可移植性(将“=”之后的所有文本视为可变量):

sed 's/^\(TEXT=[^-][^-]*\)-\([^-][^-]*\)-\([^-][^-]*\)-\([^-][^-]*\)$/\1\2\3\4/'

答案2

干得好:

echo "TEXT=abcdef-lalala-someText-yahoo" | sed 's/-//g'
TEXT=abcdeflalalasomeTextyahoo

答案3

这是我的意见...您可以在替换命令之前添加匹配(TEXT=)...就像这样:

sed '/TEXT=/s/-//g'

结果将是:

echo "TEXT=abcdef-lalala-someText-yahoo" | sed '/TEXT=/s/-//g'
TEXT=abcdeflalalasomeTextyahoo

替换命令只有匹配第一个子句才会执行,本例中匹配的是“TEXT=”。我觉得这个命令会更简洁优雅。

相关内容