Происхождение имени тройника

Просто направьте вывод 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
0
04.12.2017, 14:09
0 ответов

Теги

Похожие вопросы