我正在尝试删除位于文件开头的/*
和*/
之间的文本。在CCD_ 5和CCD_ 6之前或之间可以有CCD_ 3或CCD_。
我试着跟随,但当有空位或新行时就不起作用了。
sed '/^/*/,/*//d' file
示例文件:
/*******
delete
bla
***
*/
/* do not */
print "hi"
/*******
dont delete
****/
预期输出:
/* do not */
print "hi"
/*******
dont delete
****/
如果ed
可用。
printf '%sn' '/^[[:space:]]*//;/^[[:space:]]**//d' ,p Q | ed -s file.txt
- 将
Q
更改为w
以编辑文件
在每个UNIX盒子上的任何shell中使用任何awk,这将从您提供的输入中产生您想要的输出:
$ awk 'f; /*//{f=1}' file
/* do not */
print "hi"
/*******
dont delete
****/
但也可以考虑这种更通用的方法:
$ cat tst.awk
{ rec = (NR>1 ? rec ORS : "") $0 }
END {
$0 = rec
gsub(/@/,"@A"); gsub(/{/,"@B"); gsub(/}/,"@C")
gsub(//*/,"{"); gsub(/*//,"}")
sub(/^[[:space:]]*{[^}]*}[[:blank:]]*n/,"")
gsub(/}/,"*/"); gsub(/{/,"/*")
gsub(/@C/,"}"); gsub(/@B/,"{"); gsub(/@A/,"@")
print
}
$ awk -f tst.awk file
/* do not */
print "hi"
/*******
dont delete
****/
请参阅https://stackoverflow.com/a/56658441/1745001来解释那些gsub((正在做什么。
awk 'BEGIN{f=-1} /^ */*+/{f++}f' file
/* do not */
print "hi"
/*******
dont delete
****/