Во-первых, сохраните cat
, не используя его, когда он вам не нужен. Вместо:
cat haystack | grep needle
Вы можете просто:
grep needle haystack
Что касается вашего сценария:
> results.txt # start with a fresh file for every run
while read ip; do
grep "$ip" * | grep -Ev 'results\.txt|ips\.txt' >> results.txt
done < ips.txt
Конвейерgrep
-в-grep
предназначен для предотвращения добавления записей из входных и выходных файлов в выходной файл.
Если у вас есть миллионы файлов для проверки, и вы получаете argument list too long
, мы можем использовать такой инструмент, как xargs
, чтобы разбить нашу команду на фрагменты, достаточно короткие, чтобы оболочка могла разрешить:
> results.txt # start with a fresh file for every run
while read ip; do
find. -type f -maxdepth 1 -not -name ips.txt -not -name results.txt -print0 | xargs -0 grep "$ip" >> results.txt
done < ips.txt
Здесь мы отфильтровываем входные и выходные файлы с логикой, подаваемой в find
, поэтому нам больше не нужно grep
в grep
.
xdotool getactivewindow windowsize --usehints 80 24
--usehints
Use window sizing hints (when available) to set width and height. This is useful
on terminals for setting the size based on row/column of text rather than pixels.