gpt4 book ai didi

sed - 使用 sed 删除 '#' 之后的字符串

转载 作者:行者123 更新时间:2023-12-02 09:06:31 27 4
gpt4 key购买 nike

我有一个文本文件,如下所示:

#filelists.txt
a
# aaa
b
#bbb
c #ccc

我想删除以“#”开头的部分行,然后,如果行以#开头,则删除整行。

所以我在 shell 中使用“sed”命令:

sed -e "s/#*//g" -e "/^$/d" filelists.txt

我希望它的结果是:

a
b
c

但实际结果是:

filelists.txt
a
aaa
b
bbb
c ccc

我的“sed”命令出了什么问题?

我知道“*”表示“任意”,所以我认为“#*”表示“#”之后的字符串。

不是吗?

最佳答案

您可以使用

sed 's/#.*//;/^$/d' file > outfile

s/#.*// 删除 # 以及该行的所有其余部分,/^$/d 删除空行.

查看online test :

s="#filelists.txt
a
# aaa
b
#bbb
c #ccc"

sed 's/#.*//;/^$/d' <<< "$s"

输出:

a
b
c

另一个想法:匹配具有 # 的行,然后删除 # 和该行的其余部分,如果该行为空,则删除:

sed '/#/{s/#.*//;/^$/d}' file > outfile

参见another online demo .

这样,您就可以保留原来的空行。

关于sed - 使用 sed 删除 '#' 之后的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57654362/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com