Sed 删除了行,但留下了空格?

Sed 删除了行,但留下了空格?

这段代码有问题。它删除了与日期匹配的行(在我的情况下是 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:]]*$'

相关内容