在 Unix 中删除模式后的所有内容
Deleting everything after a pattern in Unix
我有一个字符串 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
之前的逗号?
试试这个:
echo "replenishment_category string,Date string" | sed "s/$PARTITION_COLUMN.*//"
请注意 .*
之后删除的 space 和整个命令周围的双引号。
因为你想删除变量和它前面的逗号所以遵循 sed
可能对你有帮助。
echo "replenishment_category string,Date string" | sed "s/,$PARTITION_COLUMN.*//g"
sed
显然可以在这里工作:
echo "replenishment_category string,Date string" | sed "s/\b,$PARTITION_COLUMN.*//"
输出:
replenishment_category string
你可以单独使用 shell 参数扩展来做到这一点,假设你已经启用了扩展 globs (shopt -s extglob
):
$ var='replenishment_category string,Date string'
$ part_column=Date
$ echo "${var%%?(,)"$part_column"*}"
replenishment_category string
${word%%<em>pattern</em>}
扩展在没有扩展 glob 的情况下工作,并删除了 [ 的最长匹配=12=] 从 $word
. 结束
?(<em>pattern</em>)
扩展模式匹配零次或一次出现的 pattern
并用于删除逗号(如果存在)。
"$part_column"*
匹配任何以 $part_column
扩展开头的字符串。示例中不需要引用它,但这是防止 glob 字符扩展的良好做法。
我有一个字符串 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
之前的逗号?
试试这个:
echo "replenishment_category string,Date string" | sed "s/$PARTITION_COLUMN.*//"
请注意 .*
之后删除的 space 和整个命令周围的双引号。
因为你想删除变量和它前面的逗号所以遵循 sed
可能对你有帮助。
echo "replenishment_category string,Date string" | sed "s/,$PARTITION_COLUMN.*//g"
sed
显然可以在这里工作:
echo "replenishment_category string,Date string" | sed "s/\b,$PARTITION_COLUMN.*//"
输出:
replenishment_category string
你可以单独使用 shell 参数扩展来做到这一点,假设你已经启用了扩展 globs (shopt -s extglob
):
$ var='replenishment_category string,Date string'
$ part_column=Date
$ echo "${var%%?(,)"$part_column"*}"
replenishment_category string
${word%%<em>pattern</em>}
扩展在没有扩展 glob 的情况下工作,并删除了 [ 的最长匹配=12=] 从$word
. 结束
?(<em>pattern</em>)
扩展模式匹配零次或一次出现的pattern
并用于删除逗号(如果存在)。"$part_column"*
匹配任何以$part_column
扩展开头的字符串。示例中不需要引用它,但这是防止 glob 字符扩展的良好做法。