从分隔字符串中删除开头或尾随逗号

时间:2014-12-18 07:36:09

标签: php linux awk sed

这可以使用awk,sed或PHP来完成。我有逗号分隔的字符串,我想删除一个值。

mike,suzy,carter,jason

$remove_value = mike
sed 's/$remove_value//' file_with_delimited_string

这给了我',suzy,carter,jason'

$remove_value = jason
sed 's/$remove_value//' file_with_delimited_string

这给了我迈克,苏格,卡特,'

如果删除了值的位置,如何删除错误的逗号?这是一个包含许多逗号分隔字符串的大文件。此更改必须仅适用于当前匹配。我使用PHP编辑Linux服务器上的文本文件。

6 个答案:

答案 0 :(得分:4)

你可以尝试这种简单的方式

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

答案 1 :(得分:3)

sed -r "s/$remove_value,?//g; s/,$//" File

答案 2 :(得分:0)

这就行了。

$remove_value = ltrim($remove_value, ',');
$remove_value = rtrim($remove_value, ',');

答案 3 :(得分:0)

这是一个古怪的方式在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);

答案 4 :(得分:0)

在php中通过单个正则表达式。

$str = "jason,mike,jason,suzy,carter,jason";
$remove_value = "jason";
echo preg_replace('~,'.$remove_value.'(?=,|$)|^'.$remove_value.',~', "", $str);

输出:

mike,suzy,carter

答案 5 :(得分:0)

使用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