说我想删除所有遵循通配符模式的字符串,例如' - *'
示例:给出此列表
149959
357518
357518-w2
441492
441492-w2
441492-w3
如何删除以“ - ”开头的每个模式,以实现以下目的:
149959
357518
357518
441492
441492
441492
我尝试了各种模式匹配方案,但它们没有给我所需的结果:
echo "${list//-w*/}"
返回:
149959
357518
357518
任何帮助将不胜感激!希望这个问题足够清楚。
答案 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