2017-09-01 51 views
-2

如何在[START]和[END]之間複製文本?我認爲sed是最簡單的方法。我嘗試使用grep,但我沒有看到選項標記開始和結束的位置。在一個文件夾中的許多文件中複製文本

+2

你能提供你輸入的例子,輸出您的要求?另外,*你用grep嘗試過什麼? – Jonny

+0

[START] 實施例1.1 例如1.2 [END] 中下一個文件是相同於前一個 [START] 例如2.1 例如2.2 [END] 我用SED -e的/[START]\(.*\)[END]/\1/'但我的控制檯掛起。這個文件夾中有大約100個文件,並且文本超過兩行,因此可能導致這種情況發生。 –

+0

你是在說「開始」還是「結束」行?,段落?,整個文件? – batMan

回答

0

使用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] 
1

使用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 
相關問題