-2
如何在[START]和[END]之间复制文本?我认为sed是最简单的方法。我尝试使用grep,但我没有看到选项标记开始和结束的位置。在一个文件夹中的许多文件中复制文本
如何在[START]和[END]之间复制文本?我认为sed是最简单的方法。我尝试使用grep,但我没有看到选项标记开始和结束的位置。在一个文件夹中的许多文件中复制文本
使用sed的:
$ sed -n 's/\[START\]\(.*\)\[END\]/\1/p' *.txt
example 1.1 example 1.1
example 1.2 example 1.2
example 1.3 example 1.3
example 2.1 example 2.1
example 2.2 example 2.2
以下两个输入文件:
$ cat tst1.txt
[START] example 1.1 example 1.1 [END]
a
[START] example 1.2 example 1.2 [END]
b
[START] example 1.3 example 1.3 [END]
d
$ cat tst2.txt
a
[START] example 2.1 example 2.1 [END]
b
c
[START] example 2.2 example 2.2 [END]
使用awk
如果你的意思是说逐行则:
# prints with [START] and [END] pattern
awk '/\[START\]/{f=1} f{print; if (/\[END\]/) f=0}' yourfile.txt
# prints without [START] and [END] pattern
awk '/\[START\]/{f=1;next}/\[END\]/{f=0}f' yourfile.txt
这里是例子:
输入:
[[email protected] tmp]$ cat f
[START]
example 1.1
example 1.1
[END]
a
[START]
example 1.2
example 1.2
[END]
b
[START]
example 1.3
example 1.3
[END]
d
输出:
[[email protected] tmp]$ awk '/\[START\]/{f=1} f{print; if (/\[END\]/) f=0}' f
[START]
example 1.1
example 1.1
[END]
[START]
example 1.2
example 1.2
[END]
[START]
example 1.3
example 1.3
[END]
[[email protected] tmp]$ awk '/\[START\]/{f=1;next}/\[END\]/{f=0}f' f
example 1.1
example 1.1
example 1.2
example 1.2
example 1.3
example 1.3
或者如果你的数据看起来像下面然后
[[email protected] tmp]$ awk '/\[START\].*\[END\]/' f2
[START] example 1.1 example 1.1 [END]
[START] example 1.2 example 1.2 [END]
[START] example 1.3 example 1.3 [END]
[[email protected] tmp]$ awk '/\[START\].*\[END\]/{ gsub(/\[START\]|\[END\]/,"");print }' f2
example 1.1 example 1.1
example 1.2 example 1.2
example 1.3 example 1.3
你能提供你输入的例子,输出您的要求?另外,*你用grep尝试过什么? – Jonny
[START] 实施例1.1 例如1.2 [END] 中下一个文件是相同于前一个 [START] 例如2.1 例如2.2 [END] 我用SED -e的/[START]\(.*\)[END]/\1/'但我的控制台挂起。这个文件夹中有大约100个文件,并且文本超过两行,因此可能导致这种情况发生。 –
你是在说“开始”还是“结束”行?,段落?,整个文件? – batMan