Linux sed命令与正则表达式

我要写的shell脚本的目的是将文件$file中带有Author:$name的行删除,name的范围是name_for_deal的变量中,但是写了下面的语句之后,发现并没... 我要写的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
展开
 我来答
百度网友5311d79
推荐于2016-01-31 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3219万
展开全部

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

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

sed -i '/^[ \t\*]*Author[ \t]*:[ \t]*'${name}'/d' $file
moralistxp
2015-02-10 · TA获得超过741个赞
知道大有可为答主
回答量:2216
采纳率:76%
帮助的人:499万
展开全部
cat $file|sed "/^.*Author.*:.*${name}/d"
1、你的正则对于* 的描述有问题
2、替换部分要用双引号引起,否则name变量的值无法读取
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式