Поиск и замена подстроки, только если другой подстроки нет

Я предполагаю, что ваш файл выглядит примерно так:

beeyy yeey open iee eey yeefy
funny reenydy jyyee

и называется words2.txt. Да, содержимое случайное. Это отобразит набор слов, содержащих последовательные eeи два yсимвола :

.
< words2.txt tr ' ' '\n' | grep 'ee' | grep 'y.*y'

Сначала это гарантирует, что каждое слово находится на отдельной строке с tr, затем grepдля двух последовательных e, затем снова grepдля двух (, возможно, не -последовательных )y. ]. Поскольку каждый grepявляется фильтром, конечным результатом является набор слов, содержащих как последовательные ee, так и два y.

На моем входе результат:

beeyy
yeey
yeefy
reenydy
jyyee
2
04.08.2019, 08:26
2 ответа

С GNU sed. Если текущая строка (пространство шаблонов )содержит http, перейти в конец скрипта(b). В противном случае выполните поиск и замену.

sed '/http/b; s/\.md#/.html#/' file

Выход:

1.test.html#
2.test.html#
3.http://test.html#
4.https://test.md#
5.http://test.md#
6.test2.html#

Если вы хотите отредактировать файл «на месте», используйте параметр sed -i.


См.:man sed

7
27.01.2020, 21:50
perl -pe'/http/ or s/\.md#/.html#/' input.txt > output.txt
perl -pe'/http/||s/\.md#/.html#/' input.txt > output.txt   #same
perl -i -pe'/http/||s/\.md#/.html#/' file.txt              #edit inplace, changes file.txt
perl -i.bk -pe'/http/||s/\.md#/.html#/' files*.txt         #same with backups to.bk files

sedи awkвеликолепны, но в perlесть все, что у них есть, и даже больше.

2
27.01.2020, 21:50

Теги

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