Sed 命令替换选项卡中的单词和 space 分隔的文本行

Sed command to replace a word in a tab and space-separated line of text

我在文件“text.txt”中有以下由制表符和空格分隔的字段。我想使用 sed 命令来查找 "^@\t*\stext1\t\stext2\t\s 100" 并将其替换为 "^@\t\stext1\t\stext2\t \s*1000

<Field1>     <Field2>       <Field3>    <Field4>
@             text1         text2        100
$             text3         text4        200

我试过使用下面的 sed 命令:

sed -i "/^\s*\@\s+text1\s+text2\s*/c\@/\t/\ttext1/\ttext2/\t/\t1000" /text.txt

但是,文件中没有任何内容被替换。

您的主要问题是您在 POSIX BRE 正则表达式中使用未转义的 +,它被视为文字 + 符号。

您需要使用 -E 选项来启用 POSIX ERE 语法,其中 + 被视为量词。此外,您的替换中有几个多余的 / 字符,您需要将它们删除。

您可以使用

sed -E -i "/^\s*\@\s+text1\s+text2\s*/c\@\t\ttext1\ttext2\t1000" file

参见online demo