Sed查找,匹配和替换

时间:2012-06-05 17:49:39

标签: linux sed command

所以我有以下脚本(只是一个测试)

 #!/bin/bash
 for file in *
 do
 echo $file 
 done

我正在尝试在文件周围添加括号。我也假装我不知道变量文件的全名。

  cat sc.sh | sed 's/fi*/(&)/g'
  #!/bin/bash
  (f)or (fi)le in *
  do
  echo $(fi)le
  done

所以基本上我试图匹配以fi开头的单词并在它们周围添加括号。我究竟做错了什么?我尝试了很多变化,但它没有用。从我可以看到命令匹配任何f或fi并在它们周围添加括号但不是整个单词。为什么?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

你的正则表达式fi*正在寻找f后跟0或者更多的i。你可能想要更像这样的东西:

cat tmp | sed 's/\bfi[^ ]*/(&)/g'

\bfi查找单词边界(即单词的开头),后跟'fi'。然后[^ ]*匹配单词中剩余的(非空格)字符。