8

我在文件 file.txt 中有这样的文本

xxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx
a    b   c // delimited by tab
xxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx

我知道使用sed我可以查找和替换文件中的文本。如果一行以 ab 开头(由制表符分隔),我需要用 de f 替换它。所以上面的文件将是

xxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx
d    e   f // delimited by tab
xxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx

我可以这样做来查找和替换,我只想要那些以 ab 开头的实例并替换整行。

sed -i 's/a/\t/\b/\t\/c/REPLACED TEXT/g' file.TXT
4

4 回答 4

27

使用一个^符号来表示一行的开始:

sed -i 's/^a\tb.*$/REPLACED TEXT/g' file.TXT

说明:

  • ^表示行首/输入
  • \t表示制表符
  • .表示任何字符
  • *表示前面的表达式的零个或多个
  • $表示行尾/输入
于 2012-07-25T23:10:45.847 回答
1

如果以 . 开头,则以下内容将替换整行a<tab>b<tab>c。使.*$匹配包括整行以进行替换。包含您的示例正则表达式c,但散文仅提到aand b,因此不清楚是否c需要。如果没有,则从正则表达式中删除\tc

s/^a\tb\tc.*$/REPLACED TEXT/g
于 2012-07-25T23:13:31.903 回答
1

awk

awk '/^a\tb/{$0="REPLACED TEXT"} 1' foo.txt
于 2012-07-26T16:13:50.247 回答
0

这可能对您有用(GNU sed):

sed -i '/^a\tb/c\replacement text' file
于 2012-07-26T08:29:38.693 回答