我对sed bash命令非常陌生,所以请尝试学习。
我目前面临着几千个标记文件需要清理,我正在尝试创建一个命令来删除以下内容的一部分
# null 864: Headline
body text我需要在标题之前删除的任何东西都是'# null 864:‘它总是:'# null’然后是一些数字':‘我使用gnu-sed,因为我使用的是mac
到目前为止,我想出的最好的是
gsed -i '/#\snull\s([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]):\s/d' *.md上面的方法似乎不起作用?
但是,如果我这样做了
gsed -i '/#\snull/d' *.md它做了我想做的,但是它在身体测试中做了一些意想不到的事情。
如何控制只保留标题和正文?
发布于 2021-06-10 03:37:16
考虑到您想要在headline之前打印值,并且不想打印任何其他行,那么尝试如下。
sed -E -n 's/^(#\s+null\s+[0-9]+:\s+)Headline/\1/p' Input_file如果要在标题前打印数值,且如果找不到匹配项,请打印整行,然后尝试执行以下操作:
sed -E 's/^(#\s+null\s+[0-9]+:\s+)Headline/\1/' Input_file说明:简单的使用sed的-E选项启用ERE(扩展正则表达式),然后使用sed的s选项进行替换。匹配#,后跟空格null,后跟空格数字冒号和空格,并将其保留在第一个捕获组中,而替换时,将其替换为第一个捕获组。
注意:上面的命令将在终端上打印值,如果你想把它们保存在原地,一旦你对上面代码的输出感到满意,就使用-i选项。
发布于 2021-06-10 03:40:21
如果我没理解错的话,你有这样的文件:
This should get deleted
This should too.
# null 864: Headline
body text
this should get kept你想保留标题,以及之后的一切,对吧?您可以在awk中执行此操作:
awk '/# null [0-9]+:/,eof {print}' foo.md发布于 2021-06-10 04:05:01
您可以使用awk,并使用sub将# null 864:部分替换为空字符串。
要创建新文件或覆盖同一文件,请参见this page。
当1的计算结果为true时,}1将打印整行。
awk '{sub(/^# null [0-9]+:[[:blank:]]+/,"")}1' file模式匹配
按字面意思匹配,从string
[0-9]+:[[:blank:]]+的开头匹配1+ digits,然后是:和1+空格输出
Headline
body texthttps://stackoverflow.com/questions/67910549
复制相似问题