我们正在尝试使用sed(或其他任何其他内容)查找或编写脚本,搜索目录中的每个文件(包括子文件夹),匹配开始和结束字符串,然后删除开头,中间内容并从文件中结束字符串。
找到我们需要的确切命令很难找到。帮助赞赏。
感谢。
答案 0 :(得分:0)
您可以使用perl
来利用range operator
。
举个例子:
#!/usr/bin/env perl
use strict;
use warnings;
while ( <DATA> ) {
print unless m/START_TAG_HERE/ ... m/END_TAG_HERE/;
}
__DATA__
Some text
more text
even more text
A line with START_TAG_HERE
some text to delete
don't want this
END_TAG_HERE
and this should print now.
您可以使用File::Find
以递归方式搜索目录结构并执行此操作。 perl
也支持就地编辑(例如sed
),但与File::Find
结合起来有点复杂。
但你可能会发现:
perl -i.bak -ne 'print unless m/START_TAG_HERE/ ... m/END_TAG_HERE/;' somefile
会做的伎俩。然后,您可以将其与find
命令组合使用。
答案 1 :(得分:0)
您可以尝试以下步骤
Start Pattern ='This'
结束模式='测试'
匹配开始和结束模式
Snow
删除开始模式
grep -e '^This.*testing$' -R Foldername/
删除结束模式
grep -e '^This.*testing$' -R testing/ | sed 's/\('This'\)\(.*\)/\2/'
示例:
匹配开始和结束模式:
grep -e '^This.*testing$' -R testing/ | sed 's/\('.*'\)\('testing'\)/\1/'
删除开始模式
$ grep -e '^This.*testing$' -R testing/
testing/test/file3:This is for my best testing
testing/test/file4:This is small testing
testing/file2:This is for final testing
testing/file1:This is for model testing
删除结束图案
$ grep -e '^This.*testing$' -R testing/ | sed 's/\('This'\)\(.*\)/\2/'
testing/test/file3: is for my best testing
testing/test/file4: is small testing
testing/file2: is for final testing
testing/file1: is for model testing
删除开始和结束模式
grep -e '^This.*testing$' -R testing/ | sed 's/\('.*'\)\('testing'\)/\1/'
testing/test/file3:This is for my best
testing/test/file4:This is small
testing/file2:This is for final
testing/file1:This is for model