【问题标题】:Sed command to replace a word in a tab and space-separated line of textsed 命令替换制表符和空格分隔的文本行中的单词
【发布时间】:2021-05-23 05:36:06
【问题描述】:

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

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

【问题讨论】:

    标签: shell sed sh


    【解决方案1】:

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

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

    你可以使用

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

    请参阅online demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 2021-10-25
      • 2019-11-24
      • 2014-05-21
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多