grep -l "string" * | wc -l
будет искать "строку" в содержании всех файлов в рабочем каталоге и говорить Вам сколько подобранный.
В bash
, использование sed
:
if [[ $(< "$file") != "ASDF" ]]; then
sed -i '/^ASDF$/d' "$file"
fi
Принятие Ваших имен файлов не содержит символы новой строки, это удалит строки, содержащие просто ASDF
из всех файлов в текущем каталоге, если файл не состоит из одной строки, содержащей просто ASDF
. Если Ваш sed
не имеет -i
опция, вывод во временный файл и перемещение это на месте впоследствии.
grep -l ASDF -- * | while IFS= read -r filename; do
if ! echo 'ASDF' | cmp -s - "$filename"; then
sed -i -e '/^ASDF$/d' -- "$filename"
fi
done
Вот другой подход, который удаляет ASDF
строки, и только перезаписывают исходный файл, если новый файл не пуст и не идентичен оригиналу.
tmpfile=$(mktemp -p "$(dirname -- "$filename")")
sed '/^ASDF$/' <"$filename" >"$tmpfile"
if [ -s "$tmpfile" ] && ! cmp -s -- "$filename" "$filename"; then
mv -f -- "$tmpfile" "$filename"
else
rm -- "$tmpfile"
fi
Вы хотели бы искать количество строк в файле.
Псевдокод:
if (numberOfLines > 1 && file.contains("ASDF")) {
file.remove("ASDF");
}
Более короткая версия ответа enzotib:
[[ $(< "$file") != "ASDF" ]] && sed -i '/^ASDF$/d' "$file"
Вы можете сделать это sed
- только, без тестов оболочки и еще много чего:
sed '1{/^ASDF$/{$q;d;};}' infile