使用通配符替换字符串

时间:2015-11-09 06:05:11

标签: regex bash unix

说我想删除所有遵循通配符模式的字符串,例如' - *'

示例:给出此列表

149959
357518
357518-w2
441492
441492-w2 
441492-w3

如何删除以“ - ”开头的每个模式,以实现以下目的:

149959
357518
357518
441492
441492
441492

我尝试了各种模式匹配方案,但它们没有给我所需的结果:

echo "${list//-w*/}"

返回:

149959
357518
357518

任何帮助将不胜感激!希望这个问题足够清楚。

3 个答案:

答案 0 :(得分:1)

使用sed

echo $list | sed 's/-\w*//g'

sed 's/-\w*//g' <<< "$list"

答案 1 :(得分:1)

您可以使用grep

对于档案:

% grep -o '^[^-]\+' file.txt
149959
357518
357518
441492
441492
441492

对于变量,您可以使用Here Strings:

% grep -o '^[^-]\+' <<<"$list"
149959
357518
357518
441492
441492
441492

答案 2 :(得分:1)

使用bash字符串操作和for循环:

for i in $(cat my.lst); do echo ${i%%-*};done

编辑:与管道相同的解决方案:

while read i; do echo ${i%%-*};done < my.lst