Просто направьте вывод gfind
на ] xargs
:
gfind /tmp/ -type f \( -name "*.h" -o -name "*.cpp" \) -exec ggrep -l "LARGE_INTEGER" {} + | xargs sed -i '1s/^/#include <stdint.h>\n/'
Обратите внимание, что я удалил параметр -P
из ggrep
, поскольку вы сопоставляете фиксированную строку.
Однако это решение плохо работает с именами файлов, содержащими символы новой строки; более безопасный способ сделать это - заставить gfind
выводить завершенные NULL имена файлов и перебирать вывод в цикле while
:
#!/bin/bash
gfind /tmp/ -type f \( -name "*.h" -o -name "*.cpp" \) -print0 | while read -d '' -r filepath; do
[ "$(ggrep -l "LARGE_INTEGER" "$filepath")" ] && sed -i '1s/^/#include <stdint.h>\n/' "$filepath"
done
Если вам нравятся однострочные строки:
gfind /tmp/ -type f \( -name "*.h" -o -name "*.cpp" \) -print0 | while read -d '' -r filepath; do [ "$(ggrep -l "LARGE_INTEGER" "$filepath")" ] && sed -i '1s/^/#include <stdint.h>\n/' "$filepath"; done