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。
我在文件“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。