我有一个包含如下数据的文件: https://pastebin.com/TXrmVpwF 我想要实现的是查找并删除所有具有模式但名称中没有扩展名或点的行,如果为 true,则删除之后的空行:
图案:
# /x/123
# /x/test
# /x/test_backup
# /x/123/10
答案1
假设该文件是 Unix 文本文件(而不是 DOS 文本文件,在这种情况下您应该dos2unix
首先运行它):
sed '/^#/{ /\./!{ N; /\n$/d; }; }' <file
带注释的sed
脚本:
/^#/{ # The current line starts with a "#"
/\./!{ # The current line does not contain a dot
N; # Append next line with a \n in-between
/\n$/d; # The line just appended was empty, delete, start next cycle
}
}
# (implicit print)
如果目录名中允许使用点但最后一个路径名部分不允许使用点(即# /x.x/text
如果后面跟着一个空行则应删除),则更/\./
改为/\.[^/]*$/
。
答案2
我不确定这个问题,但我认为这就是答案:
grep -v '\.' TXrmVpwF | grep -e '/'
grep -v '\.'
:过滤掉带点的行。
grep -e '/'
:获取其余路径。
这是结果:
# /x/123
# /x/test
# /x/test_backup
# /x/123/10
# /x/123/100
# /x/123/103
# /x/123/1333