Ваша идея была правильной, но вы забыли оставить регулярное выражение в команде sed
, чтобы использовать двойные кавычки для расширения $var
.
Также вам не нужно использовать wc -l
для подсчета совпадений.Все семейства утилит под grep
реализуют флаг -c
, который возвращает количество совпадений.Тем не менее, вам даже не нужно считать совпадения, но используйте код возврата команды (если совпадение было найдено или нет) просто как
if zgrep -qE "$var" "$inputfiles" ; then
Предполагая, что для отладки вам может понадобиться счетчикв целях, вы можете продолжить свой подход с изменениями в вашем скрипте, как показано ниже
Обратите внимание, как var
интерполируется в подстановке sed
, оставляя его развернутым в двойных кавычках и раз развернутым, сохраняя литералзначения с использованием одинарных кавычек.
while IFS= read -r var
do
count1=$(zgrep -Ec "$var" "$inputfiles")
if [ "${count1}" -ne 0 ]
then
sed -r -i 's|'"$var"'|\1\2XXXX\4\5|g' "$inputfiles"
sed -r -i "s/(HTTP\/)(.{2})(.*?)(.{2})(group\.com)/'\1\2XXXX\4\5'/g" "$inputfiles"
egrep -in "${var}" "$inputfiles"
fi
done < "$input"