代码
find /tmp/ -type f \
\( -name "*.h" \) -o \( -name "*.cpp" \) -o \
\( \! -name "*.bak" \) -exec \
sed -i '1s/^/#include <stdint.h>\n/' {} +
Run Code Online (Sandbox Code Playgroud)
我不完全确定这是正确的方法。我直接写入文件而不使用临时文件。我想用.h和.cpp文件替换行的开头,但不替换.bak文件。
如何进行有效的更换?注意:我正在使用 GNU sed
。
我尝试了 Terdon 的命令,插入应用于错误的文件:
$ cat test.sh
gfind /tmp/ -type f \
\( -name "*.h" -o -name "*.cpp" -o ! -name "*.bak" \) \
-exec gsed -i '1s/^/#include <stdint.h>\n/' {} +
$ sh test.sh
$ cat test.sh
#include <stdint.h>
gfind /tmp/ -type f \
\( -name "*.h" -o -name "*.cpp" -o ! -name "*.bak" \) \
-exec gsed -i '1s/^/#include <stdint.h>\n/' {} +
Run Code Online (Sandbox Code Playgroud)
其中所有命令都是 GNU:find 和 sed。
尝试这个:
find /tmp/ -type f -name "*.h" -o -name "*.cpp" \
-exec sed -i '1s/^/#include <stdint.h>\n/' {} +
Run Code Online (Sandbox Code Playgroud)
此外,正如我正确指出的那样,这! -name "*.bak"
是多余的。该-name *foo
模式仅匹配以foo
. 因此,*.cpp
和*.h
已经排除*.bak
.
归档时间: |
|
查看次数: |
269 次 |
最近记录: |