Как удалить строки, которые удваиваются только после строки, содержащей некоторую строку - linux / bash - PullRequest
1 голос
/ 25 марта 2020

как указано в заголовке. Я нашел команду, которая работает так, что строки, которые удваиваются, удаляются:

perl -i.bak -ne 'print if ! $x{$_}++' ~/.bashrc

, но как этого добиться только после строки, которая содержит конкретную c строку, например:

if line is after line with string "hello"
    perl -i.bak -ne 'print if ! $x{$_}++' ~/.bashrc

Я пытаюсь использовать bash для этого.

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Вы можете использовать оператор извлечения диапазона ..:

perl -i.bak -ne 'print if //../hello/ or !$x{$_}++' ~/.bashrc
0 голосов
/ 25 марта 2020

С Эдом это очень просто. Я также поставил знак «+» во всех моих именах файлов, чтобы они служили разделителем записей между именем файла и расширением, поэтому я могу легко разделить их с помощью Cut, но вы можете удалить их, если хотите.

Файл + .txt: -

hi
hello
hello
there

Скрипт +. ​​sh: -

#!/bin/sh -x

init () {
cat > edcommands+.txt << EOF
/hello/d
wq
EOF

next
}

end () {
rm ./edcommands+.txt
exit 0
}

next () {
[[ -z $(echo $edresult | grep '?') ]] && main
end
}

main () {
edresult=$(ed -s file+.txt < edcommands+.txt)
next 
}

init
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...