Добавление новой линии с использованием SED на определенный шаблон

Это должно сработать:

#!/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 строк) он засыпает и сбрасывает счетчик. Затем выполните цикл, пока не закончится ввод.

0
13.11.2018, 13:25
2 ответа

Одно из возможных решений:

$ 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"    
1
28.01.2020, 02:31

Ваше собственное предложение

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'
1
28.01.2020, 02:31

Теги

Похожие вопросы