首页 > 解决方案 > sed 命令替换制表符和空格分隔的文本行中的单词

问题描述

我在文件“text.txt”中有以下字段,由制表符和空格分隔。我想使用 sed 命令查找 "^@\t*\s text1\t \s text2\t \s 100" 并将其替换为 "^@\t \s text1\t \s text2\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

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

标签: shellsedsh

解决方案


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

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

您可以使用

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

请参阅在线演示


推荐阅读