Это легко сделать с помощью sed:
sed 's/,//3' file
Если вы хотите напрямую применить изменения во входном файле, запустите:
sed -i 's/,//3' file
команда
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
Сохраните ваши данные в файле (для теста )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
Предполагая, что ваш файл содержит только «простые» 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
.
Если вы хотите удалить только одно конкретное значение из списка, разделенного запятыми -, я бы рекомендовал подход, основанный на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.
Чтобы отредактировать файл напрямую с помощью sed, используйте
sed -i '/AdminList=abc1@abc.com/d' file