1.find 命令
find . -name "*.cpp" --查找后缀名为cpp的文件
find . -name "*.cpp" > log.txt -- 输出到log.txt中
find . -name "*.cpp" -o -name "*.c" -- 列出所有的cpp和c文件
2.sed命令
find . -name "*.cpp"|sed -e 's/.\//..\/..\//' -e 's/.cpp/.cpp \\/' > log.txt -- 查找当前目录下后缀名为cpp的文件,然后输出格式为../../AndCommon.cpp \
附:正则表达式中的转义字符(转自msdn)
字符或序列 | 描述 |
---|---|
以下字符之外的所有字符: . $ ^ { [ ( | ) * + ?\ | 这些字符在正则表达式中没有特殊含义;它们与自身匹配。 |
\a | 与报警 (bell) 符 \u0007 匹配。 |
\b | 在[character_group]字符类中,与退格键\u0008 匹配。在字符类之外,\b 是一个与单词边界匹配的定位点。 |
\t | 与制表符 \u0009 匹配。 |
\r | 与回车符 \u000D 匹配。 请注意 \r 与换行符 \n 不是等效的。 |
\v | 与垂直制表符 \u000B 匹配。 |
\f | 与换页符 \u000C 匹配。 |
\n | 与换行符 \u000A 匹配。 |
\e | 与转义符 \u001B 匹配。 |
\ nnn | 与 ASCII 字符匹配,其中nnn包含两个或三个数字表示八进制符号代码的。 例如,\040 表示空格字符。 如果此构造只有一个数字(例如,\2)被解释为反向引用,或如果它对应于捕获组的编号,则它被解释为反向引用。 |
\x nn | 与 ASCII 字符匹配,其中nn是两位数字的十六进制码位。 |
\c X | 与 ASCII 控制字符匹配,其中 X 是控制字符的字母。 例如,\cC 是 CTRL-C。 |
\u nnnn | 匹配UTF-16编码,当nnnn是十六进制值 |
\ | 在后面带有不识别为转义符的字符时,与该字符匹配。 例如,\* 匹配星号 (*) 并与 \x2A 相同。 |
\G | 在最后一个匹配结束的位置开始。 |
(.+) | 一次或多次与任何字符匹配。 这是第一个捕获组。 |
[\t\u007c] | 与选项卡 (\t) 或垂直条 (|) 匹配。 |
(.+) | 一次或多次与任何字符匹配。 这是第二个捕获组。 |
\r?\n | 与零个或一个后接一个新行的回车符匹配。 |
3.sed和grep结合替换文本中字符
sed -i '' "s/xiaowu/0124/g" `grep xiaowu -rl *.h *.cpp` -- 将当前目录下所有.h和.cpp文件中的xiaowu替换为0124
注意点:(1) sed -i 后有两个单引号',因为mac下的sed命令和linux 的有些许不同,-i后必须加上任意字符,那些字符就作为备份文件的后缀名,比如sed -i.bak 's/xiaowu/0124/g' (-i后没空格)。 这里用两个单引号替代了(-i后有空格)
(2)grep命令前后不是单引号,而是键盘上esc下面的那个键。
补充:最近发现这个命令貌似不好使了,换了一个命令代替,如下:
sed -i '' "s/xiaowu/0124/g" `find * -name "*.h" -o -name "*.cpp" -exec grep 'xiaowu' -rl {} \;`
先用find和grep命令结合查找出文本所在的文件,然后用sed替换。