Php 从分隔字符串中删除开头或结尾的逗号

Php 从分隔字符串中删除开头或结尾的逗号,php,linux,awk,sed,Php,Linux,Awk,Sed,这可以通过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 这给了我“迈克,苏西,卡特” 如何删除错误的逗

这可以通过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
输出:

remove_value='mike'
suzy,carter,jason
remove_value='suzy'
mike,carter,jason
remove_value='jason'
mike,suzy,carter
示例:

remove_value='mike'
suzy,carter,jason
remove_value='suzy'
mike,carter,jason
remove_value='jason'
mike,suzy,carter
输出:

remove_value='mike'
suzy,carter,jason
remove_value='suzy'
mike,carter,jason
remove_value='jason'
mike,suzy,carter
示例:

remove_value='mike'
suzy,carter,jason
remove_value='suzy'
mike,carter,jason
remove_value='jason'
mike,suzy,carter
输出:

remove_value='mike'
suzy,carter,jason
remove_value='suzy'
mike,carter,jason
remove_value='jason'
mike,suzy,carter
这就行了

$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

使用,或者如果<代码>杰森<代码>出现在中间?哦,等等……是的,如果它在中间,那就不会了。work@AvinashRaj,根据您的输入字符串,“我的命令”将仅删除第一个事件。如果您需要删除所有事件,请使用
g
标志删除所有事件。抱歉,需要使用双引号!!我通过命令行与mike、carter等进行了测试。不需要类
[,]
,一个简单的
,也不需要
g
(每种情况下出现一次,如果行中可能出现几个相同的名称,至少出现第二次)@NeronLeVelu:对!将第一个“g”保留为多次出现(通用)是受欢迎的。如果
-r
不可用(如posix sed),也可以用
\{0,1\}
替换