Это должно сработать:
#!/bin/bash
while read var
do
echo $var #here you can do more stuff with $var (this is your line)
count=$(( $count+1 ))
if [ "$count" = "10" ]; then
count=0
sleep 180
fi
done
Затем вы можете сохранить это, например, как foo.sh
, сделать его исполняемым с помощью chmod + x foo.sh
и запустить его следующим образом:
cat your_file.txt | ./foo.sh
Этот сценарий читает одну строку ввода, сохраняет ее в var
, распечатывает, увеличивает счетчик до 1 и по достижении 10 итераций (т. е. считанных 10 строк) он засыпает и сбрасывает счетчик. Затем выполните цикл, пока не закончится ввод.
Одно из возможных решений:
$ sed 's/\("vulnid":\) \(.*\) \(.*\)"/\1 \2"\n"product": "\3"/' file
"vulnid": "CVE-2018-17435"
"product": "(hdf5)splitmehere"
"stuff":"stuffhere(somedata)"
"vulnid": "CVE-2018-17435"
"product": "(hdf5)splitmehere"
"stuff":"stuffhere"
"vulnid": "CVE-2018-17435"
"product": "(hdf5)splitmehere"
"stuff":"stuffhere"
Ваше собственное предложение
sed -e "s/ /\n/2"
почти делает то, что вы описываете. Все, что осталось, это поместить дополнительный текст "product:"
вокруг разрыва строки :
sed -e 's/ /"\n"product:" /2'
(Я изменил внешние кавычки на одинарные -кавычки, чтобы использовать двойные -кавычки внутри выражения.)
Некоторые версии sed
могут не интерпретировать \n
как новую строку. В спецификацииsed
указано:
A line can be split by substituting a <newline> into it. The application shall escape the <newline> in the replacement by preceding it by a <backslash>.
т.е.
sed -e 's/ /"\
"product:" /2'