1

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

 #!/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 并在它们周围添加括号,但不是整个单词。为什么?

任何帮助将不胜感激。

4

1 回答 1

1

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

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

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

于 2012-06-05T18:04:20.050 回答