Linux sed命令与正则表达式

我要写的shell脚本的目的是将文件$file中带有Author:$name的行删除,name的范围是name_for_deal的变量中,但是写了下面的语句之后,发现并没有生效,求专家指点一二。
for name in "${name_for_deal[@]}"; do
sed -i '/^[ \t\*]*Author[ \t]*:[ \t]*${name}/d' $file
done

1. "${name_for_deal[@]}" 去掉双引号。因为 for A in B 结构中,B是一个以空格分隔的数据集合。而加了双引号就被当做一个整体字符串了。

2. sed的单引号会屏蔽$的取值功能,shell变量${name}要得到解析必须拿到单引号外面来。即,在${name}前闭合单引号,之后再重新开始。

sed -i '/^[ \t\*]*Author[ \t]*:[ \t]*'${name}'/d' $file

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-02-10
cat $file|sed "/^.*Author.*:.*${name}/d"
1、你的正则对于* 的描述有问题
2、替换部分要用双引号引起,否则name变量的值无法读取
相似回答