Относительный номер строки после совпадения в sed

Если вы ищете повторяющиеся строки, которые не известны заранее, вот сценарий, который будет искать повторяющиеся слова в наборе файлов (слово здесь означает все, что имеет пробелы вокруг него):

#!/bin/bash

dup_words() {
    zcat $1 | tr ' ' '\n' | sed '/^$/d' | sort | uniq -c | awk '{if ($1 > 1) m=1; } END { exit(!m) } '
}

for i in *.gz
do
    dup_words $i && echo $i
done

Он будет разбивать строки при каждом появлении пробела, затем удалять пустые строки, находить и подсчитывать вхождения и, наконец, проверять наличие более одного вхождения.

Цикл просто выводит имя файла, и вы можете настроить действие после &&по своему усмотрению.

2
14.04.2021, 23:51
1 ответ

Возможно, так:

sed '/start/{:a;N;/end/!ba;s/[^\n]*/replaceString/2}' file
1
28.04.2021, 22:52

Теги

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