查找并替换以模式开头的行

时间:2012-07-25 23:05:33

标签: regex unix sed

我在文件file.txt中有一个文本,就像这样

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

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

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

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

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

4 个答案:

答案 0 :(得分:14)

使用^符号表示一行的开头:

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

Exmplanation:

  • ^表示行/输入的开头
  • \t表示标签符号
  • .表示任何字符
  • *表示前面的表达式中的零个或多个
  • $表示行/输入

答案 1 :(得分:1)

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

s/^a\tb\tc.*$/REPLACED TEXT/g

答案 2 :(得分:1)

使用awk

awk '/^a\tb/{$0="REPLACED TEXT"} 1' foo.txt

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed -i '/^a\tb/c\replacement text' file