1 (04.04.2020 18:10:59 отредактировано efremovzone)

Всем привет.

Есть файл, содержащий:

жгучий
равновесие
любо
конец
начало
любо
красный
зеленый
любовь

Надо удалить все вхождения слова "любо".

Ввожу:

cat file1.txt | sed '/любо/d' > file2.txt

Удаляет как "любо", так и "любовь".

Попробовал для эксперимента:

cat file1.txt | sed 's/любо/123/g' > file2.txt

Действительно sed заменил "любовь" на "123вь"

Помогите, как правильно реализовать.

Заранее спасибо.

2

efremovzone, а если так?

 Консоль:
cat file1.txt | sed 's/любо//' > file2.txt

Только лишнее начало строки добавляет, с этим разберётесь сами?

ᛈᚺ'ᚾᚷᛚᚢᛁ ᛗᚷᛚᚹ'ᚾᚨᚠᚺ ᚲᛏᚺᚢᛚᚺᚢ ᚱ'lᚷᛖᚺ ᚹᚷᚨᚺ'ᚾᚨᚷᛚ ᚠᚺᛏᚨᚷᚾ

Asus Prime B460M-K, i5-10500, Intel 630 UHD + NVIDIA GeForce RTX3060, DDR4 32 GB, SSD 1TB + HDD 2TB | Linux Mint 22.3 Cinnamon + Windows 11

3 (04.04.2020 18:13:03 отредактировано efremovzone)

Rizado пишет:

efremovzone, а если так?

 Консоль:
cat file1.txt | sed 's/любо//' > file2.txt

Только лишнее начало строки добавляет, с этим разберётесь сами?

Спасибо, но все равно заменяет не так, оставляет вместо "любовь" - "вь", как sed сказать, что "любо" это целое слово, а не вхождение?

4

cat file1.txt | sed '/^любо$/d' > file2.txt

https://www.linux.org.ru/forum/general/14030386

MSI H81M-ECO, Intel Core i3-4130T, Intel HD Graphics 4400 | MgaRemix-9 Budgie 10.8.1 x86_64 + Windows 10

5

alex_q_2000 пишет:

cat file1.txt | sed '/^любо$/d' > file2.txt

https://www.linux.org.ru/forum/general/14030386

Огромное спасибо! То что надо!

6 (26.07.2020 15:21:32 отредактировано bestboy)

efremovzone пишет:
alex_q_2000 пишет:

cat file1.txt | sed '/^любо$/d' > file2.txt

https://www.linux.org.ru/forum/general/14030386

Огромное спасибо! То что надо!


А как теперь сделать чтобы найденная строка которая не будет записываться в новый файл выводилась в консоль?
Да, конечно можно сначала грепом вывести в консоль а потом выполнить сед.
А как сделать это только седом для не подымания нагрузки пк

7 (26.07.2020 19:38:54 отредактировано alex_q_2000)

bestboy пишет:

А как теперь сделать чтобы найденная строка которая не будет записываться в новый файл выводилась в консоль?

Исключить из файла file1.txt строки, которые начинаются с 'любо' (точное совпадение) и вывести:
---
sed '/^любо$/ d' file1.txt
или
grep -v '^любо$' file1.txt

Инверсия:
---
sed '/^любо$/! d' file1.txt
grep '^любо$' file1.txt

13 инструментов для обработки текста в командной оболочке

bestboy пишет:

...для не подымания нагрузки пк

По нагрузке на процессор я бы разделил так (субъективно): grep (легко), sed (средне - поточный редактор в конвейерах), awk (тяжело - язык построчного разбора и обработки по шаблонам). Кто из них "прожорливее" - для примера из темы не важно, поскольку речь идёт о файле в 10-20 строк. Если файл - это простыня с километр, то нужно стараться "крутиться" вокруг лёгких конструкций c "grep, cut, tail, head, sed". awk - это если припрёт или не хочется возиться, например с cut.

MSI H81M-ECO, Intel Core i3-4130T, Intel HD Graphics 4400 | MgaRemix-9 Budgie 10.8.1 x86_64 + Windows 10