Это можно сделать с помощью awk, sed или PHP. У меня есть строка с разделителями-запятыми, из которой я хочу удалить значение.
mike,suzy,carter,jason
$remove_value = mike
sed 's/$remove_value//' file_with_delimited_string
Это дает мне, «Сьюзи, Картер, Джейсон»
$remove_value = jason
sed 's/$remove_value//' file_with_delimited_string
Это дает мне «Майк, Сьюзи, Картер»
Как убрать ошибочную запятую независимо от расположения удаленного значения? Это большой файл с множеством строк, разделенных запятыми. Это изменение должно быть только для текущего матча. Я использую PHP для редактирования текстового файла на сервере Linux.
Вы можете попробовать этот простой способ
sed "s/,\?$remove_value,\?//" FileName
Если вы проверяете среднее значение, вы можете использовать этот способ
sed "s/,$remove_value\|$remove_value,//" FileName
Если вы удалите все значения, которые встречаются в строке, используйте g
sed "s/,$remove_value\|$remove_value,//g" FileName
Пример:
remove_value='mike'
Выход:
suzy,carter,jason
Пример:
remove_value='suzy'
Выход:
mike,carter,jason
Пример :
remove_value='jason'
Выход:
mike,suzy,carter
sed -r "s/$remove_value,?//g; s/,$//" File
Это поможет.
$remove_value = ltrim($remove_value, ',');
$remove_value = rtrim($remove_value, ',');
Вот дурацкий способ сделать это в php:
$list = 'mike,suzy,carter,jason';
$list_array = explode(',' , $list);
$goner = 'suzy';
$goner_index = array_search($goner, $list_array);
unset($list_array[$goner_index]);
$list = implode(',', $list_array);
В PHP через одно регулярное выражение.
$str = "jason,mike,jason,suzy,carter,jason";
$remove_value = "jason";
echo preg_replace('~,'.$remove_value.'(?=,|$)|^'.$remove_value.',~', "", $str);
Выход:
mike,suzy,carter
С awk:
$ for replace_string in mike suzy carter jason;
do awk -v s=$replace_string '{ sub("((,|^)"s")|("s"(,|$))","") }1' a.txt;
done
suzy,carter,jason
mike,carter,jason
mike,suzy,jason
mike,suzy,carter