使用sed时忽略页面上的特定模式

时间:2012-03-13 01:04:46

标签: bash sed

我正在使用sed来查找和替换文档中的某些项目:

        sed -i "0,\/^$a/s//$b/" ./file

这用于替换单词,例如:将“lion”替换为“animal”。

I saw the lions at the zoo.

这改为:

I saw the animals at the zoo.

在文档中,文本中混合了一些组件,我希望sed完全忽略。这些采用\macro{text}的形式,例如:

I saw the li\footnote{Hello.}ons at the zoo.

由于区域\footnote{Hello.}仍然必须更改为:

I saw the animals at the zoo.

这些都以\开头,以}结尾,但绝不会使用多个},也不会使用其他\}。用于文件中的其他位置。

  • 如何让sed忽略这些?

1 个答案:

答案 0 :(得分:2)

这可能对您有用:

echo "I saw the li\footnote{Hello.}ons at the zoo." | 
sed 'h;s/\\[^}]*}//g;/'"$a"'/!{g;b};s//'"$b"'/g;'
  • 这会将当前行保存在保留空间
  • 删除微距调用
  • 如果$a不存在,则会返回原始行,否则会将$a替换为$b

N.B。假设没有带有混合宏的行