В приведенном ниже сценарии я хочу добавить имя файла в качестве префикса для каждой выходной строки, сгенерированной grep. я не знаю, почему это не заменяет имя файла с $ файла, я получаю $ файл как prefix.can кто-нибудь поможет мне в этомкак заменить переменную в сценарии оболочки
function traverse() {
for file in "$1"/*
do
if [ ! -d "${file}" ] ; then
if [ ${file: -2} == ".c" ]
then
./sed.sed "$file" > latest_log.txt #To remove all the comments
grep -nir "$2" latest_log.txt >> output.log #grep matched lines
sed -i "s/^/$file/" output.log > grepoutput3.txt #prefix filename($file here)
echo "${file} is a c file"
fi
else
traverse "${file}" "$2"
fi
done
}
function main() {
traverse "$1" "$2"
}
main "$1" "$2"
следующую строку следует добавить имя файла в качестве префикса, но $ файл не заменяется, кроме того, что весь скрипт работает нормально.
sed -i "s/^/$file/" ex.txt > grepoutput3.txt
EX: поиск "прием" во всех .c файлов в folder.Take first_file.c является один.
FIRST_FILE.C
приветствовать здесь
/* Добро пожаловать здесь */
// приветствовать здесь
приветствовать здесь 2
Ожидаемый результат
/DIR/FIRST_FILE.C: 1: добро пожаловать здесь
/DIR/FIRST_FILE.C:4: добро пожаловать здесь 2
с моим сценарием, выход
1: Добро пожаловать здесь
4: Добро пожаловать здесь 2
Итак, я пытаюсь для префикса имени файла (/DIR/FIRST_FILE.C) для каждой строки. Мы можем получить это имя файла из $ file, но sed не интерпретирует его.
Thaks для ответа. да, ex.txt там неверен, это должно быть output.log. Моя проблема заключается в том, как я могу заменить файл $ (который является .c файлом) в команде sed.Я хочу префикс этого имени файла для вывода, сгенерированного grep. –