这段代码有问题。它删除了与日期匹配的行(在我的情况下是 09/05/17),这没问题。但取而代之的只是空白行。
有人有解决方案吗?
sed -i -e "s|$PrevDay.*$||" $DataFile2
答案1
将我之前的评论扩展为答案。
sed -i -e "\|$PrevDay.*$|d" $DataFile2
解释:您正在使用替换每行文本的函数。您选择字符|
作为分隔符,在第一个和第二个分隔符之间写下要删除的表达式,在第二个和第三个分隔符之间写下要插入的表达式。因此,该行被编辑但未被删除。
如果您想删除该行,您应该使用不同的语法:
\|
定义|
为分隔符,而不是默认的/
$PrevDay.*$
是要搜索的模式,是$PrevDay
你的 bash 脚本中的变量
|
标志着搜索模式的结束
d
表示要删除与模式匹配的行
看这Stackoverflow 上也有类似的问题。
正如在类 UNIX 世界中常见的那样,相同的结果可以通过不同的方式实现,例如使用awk
;以下表达式的意思是:“如果模式不匹配,则打印整行”。
awk -i '!/$PrevDay.*$/ {print $0}' $DataFile2
答案2
试一试:sed -i -e "s|$PrevDay.*$||" $DataFile2 | grep -v '^$'
如果您的输入行不为空但包含空格字符,则可以使用
sed -i -e "s|$PrevDay.*$||" $DataFile2 | grep -v '^[[:blank:]]*$'