SED Linux命令完全替换为一行

时间:2014-02-27 13:50:00

标签: regex sed

我有以下批次

#! /bin/bash
PATTERN1="MACRO"
PATTERN2="HI"
sed -e "s/${PATTERN1}/${PATTERN2}/g" config.conf 

因此,config.conf文件的内容是

ABC
   DEF
   ERF MACRO
   ERR
MACRO

因此,命令的输出是:

ABC
   DEF
   ERF HI
   ERR
HI

但所需的输出是

ABC
   DEF
   ERF MACRO
   ERR
HI

换句话说,我只需要用每行完全匹配的模式替换模式,在同一行中没有空格或其他单词。

2 个答案:

答案 0 :(得分:3)

将<{1}}和^添加到您要执行的模式中完全匹配

以您的示例:您可以这样做:

$

或使用原始的sed行,修改 sed -e "s/^${PATTERN1}$/${PATTERN2}/g" ...

PATTERN1

答案 1 :(得分:0)

试试这个:

awk '$0==p {$0=r}8' p="${PATTERN1}" r="${PATTERN2}" file