我想使用 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=”。我觉得这个命令会更简洁优雅。