在Unix中删除模式后删除所有内容

时间:2018-05-29 12:20:54

标签: regex unix sed substitution

我有一个字符串replenishment_category string,Date string,我想删除以Date开头的所有内容(包括它),如果它存在则还要删除前面的逗号。

我将要替换的字符串存储在变量中:

PARTITION_COLUMN='Date'

我尝试sed替换变量PARTITION_COLUMN

之后的所有内容
echo "replenishment_category string,Date string" | sed "s/"$PARTITION_COLUMN".* //g"

但输出仍然具有日期之后的字符串:

replenishment_category string,string

如何删除string部分以及Date之前的逗号?

4 个答案:

答案 0 :(得分:1)

试试这个:

echo "replenishment_category string,Date string" | sed "s/$PARTITION_COLUMN.*//"

注意.*之后删除的空格以及整个命令的双引号。

答案 1 :(得分:0)

由于您要删除之前的变量和逗号,因此sed可能会对您有帮助。

echo "replenishment_category string,Date string" | sed "s/,$PARTITION_COLUMN.*//g"

答案 2 :(得分:0)

sed显然可以在这里工作:

echo "replenishment_category string,Date string" | sed "s/\b,$PARTITION_COLUMN.*//"

输出:

replenishment_category string

答案 3 :(得分:0)

您可以单独使用shell参数扩展,假设您已启用扩展globs(char):

shopt -s extglob
  • $ var='replenishment_category string,Date string' $ part_column=Date $ echo "${var%%?(,)"$part_column"*}" replenishment_category string 扩展无需扩展全局,并从${word%%pattern}的末尾删除 pattern 的最长匹配。
  • $word扩展模式匹配零次或一次出现 ?(pattern) ,用于删除逗号(如果存在)。
  • pattern匹配以"$part_column"*扩展名开头的任何字符串。在示例中不需要引用它,但是防止glob字符扩展的良好做法。