Как удалить строку из строки

Это легко сделать с помощью sed:

sed 's/,//3' file

Попробуйте онлайн!

Если вы хотите напрямую применить изменения во входном файле, запустите:

sed -i 's/,//3' file

0
14.01.2020, 10:55
4 ответа

команда

sed "/AdminList/s/abc1\@abc\.com,//g"  filename

вход

JFR=abc1@abc.com,abc2@abc.com
UserListApp1=abc1@abc.com,abc2@abc.com
UserListApp2=abc1@abc.com
AdminList=abc1@abc.com,abc2@abc.com,abc3@abc.com,abc4@abc.com
GlobalList=abc1@abc.com

выход

JFR=abc1@abc.com,abc2@abc.com
UserListApp1=abc1@abc.com,abc2@abc.com
UserListApp2=abc1@abc.com
AdminList=,abc2@abc.com,abc3@abc.com,abc4@abc.com
GlobalList=abc1@abc.com
0
28.01.2020, 02:38

Сохраните ваши данные в файле (для теста )test.txt

JFR=abc1@abc.com,abc2@abc.com
UserListApp1=abc1@abc.com,abc2@abc.com
UserListApp2=abc1@abc.com
AdminList=abc1@abc.com
GlobalList=abc1@abc.com

И используйте sed или grep

cat test.txt | sed /AdminList/d
cat test.txt | grep -v AdminList

Редактировать:

cat test.txt | grep AdminList | awk -F"=" '{print $2}' | sed -n 1'p' | tr ',' '\n' | while read word; do if [ "$word" = "abc1@abc.com" ]; then continue; else echo $word; fi; done
0
28.01.2020, 02:38

Случай 1 :Удалить всю часть «значение»

Предполагая, что ваш файл содержит только «простые» key=valueоператоры, т. е. часть «значение» содержит без знака =, вы можете использовать sedследующим образом:

sed '/^AdminList/s/=.*$/=/' propertyfile.txt

Вывод для вашего примера будет выглядеть так::

JFR=abc1@abc.com,abc2@abc.com
UserListApp1=abc1@abc.com,abc2@abc.com
UserListApp2=abc1@abc.com
AdminList=
GlobalList=abc1@abc.com

Идея состоит в том, чтобы заменить (на sв команде )выражение, состоящее из =, за которым следует любое количество символов (на .*часть )до конец строки (символ $)с простым =, но только в строках, начинающихся с AdminList.

Вариант 2 :Значение акциза из списка значений

Если вы хотите удалить только одно конкретное значение из списка, разделенного запятыми -, я бы рекомендовал подход, основанный наawk-:

awk '/^AdminList/ {sub(/abc1@abc.com,?/,""); print;next} {print}' propertyfile.txt

Это сопоставит строку, начинающуюся с AdminList, и заменит шаблон abc1@abc.com, возможно, конечным ,с пустой строкой, напечатает измененную строку и пропустит выполнение до следующей строки. Для всех остальных строк будет просто напечатана вся строка.

Учитывая ваш второй пример ввода, это дает:

JFR=abc1@abc.com,abc2@abc.com
UserListApp1=abc1@abc.com,abc2@abc.com
UserListApp2=abc1@abc.com
AdminList=abc2@abc.com,abc3@abc.com,abc4@abc.com
GlobalList=abc1@abc.com

Выбранный синтаксис должен быть достаточно переносимым; Я протестировал его с помощью GNU Awk и Mawk.

1
28.01.2020, 02:38

Чтобы отредактировать файл напрямую с помощью sed, используйте

sed -i '/AdminList=abc1@abc.com/d' file
0
28.01.2020, 02:38

Теги

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