2016-11-18 83 views
0

我有一個文件,偶爾會有分割線。sed:根據第四個連接線

拆分是通過兩個連續的字母字符串來表示的。

 

5 

00:00:00,000 --> 00:00:00,000 

Alphabetic characters 
Alphabetic characters 

6 

00:00:00,000 --> 00:00:00,000 

Alphabetic characters 

7 

00:00:00,000 --> 00:00:00,000 

Alphabetic characters 
Alphabetic characters 

8 

00:00:00,000 --> 00:00:00,000 

Alphabetic characters 

..... 

我想加盟分割線回:

 

5 

00:00:00,000 --> 00:00:00,000 

Alphabetic characters Alphabetic characters 

6 

00:00:00,000 --> 00:00:00,000 

Alphabetic characters 

7 

00:00:00,000 --> 00:00:00,000 

Alphabetic characters Alphabetic characters 

8 

> 00:00:00,000 --> 00:00:00,000 

Alphabetic characters Alphabetic characters 
..... 

使用SED。我不清楚如何加入前一行。 有什麼建議嗎?

+0

如果它是一個SRT文件,那麼在最後一行文本之後有一個空白行(在字幕索引之前),與您的示例不同。 –

+0

你可以[編輯]你的問題,因爲它不能反映有效的.SRT文件的實際格式。所以基於你的例子的解決方案將不會令人滿意。 –

+0

帶有四個空格的前綴行。請看[編輯幫助](http://stackoverflow.com/editing-help)。 – Cyrus

回答

1

sed是針對個別行的簡單置換,就是這樣。爲別的,你應該使用AWK:

$ awk '/[[:alpha:]]/{ if (buf=="") {buf=$0; next} else {$0=buf OFS $0; buf=""} } 1' file 

5 

00:00:00,000 --> 00:00:00,000 

Alphabetic characters Alphabetic characters 

6 

00:00:00,000 --> 00:00:00,000 


7 

00:00:00,000 --> 00:00:00,000 

Alphabetic characters Alphabetic characters 

8 

00:00:00,000 --> 00:00:00,000 

Alphabetic characters Alphabetic characters 

..... 

以上將工作強勁,便攜,並有效地與所有POSIX兼容awks所有UNIX系統。

+0

謝謝,對我很好。 這是可能的,否定運算符? 像這樣 - >「不等於[:digit:]」 – Marcelo

+0

取決於你的意思,那是''!/ [[:digit:]] /'或'/ [^ [:digit:]] /' 。 –

1
sed '$!{N;/^[a-zA-Z ][^\n]\+\n[a-zA-Z ]/{s/\n/ /}}' 

匹配兩行回到後端滿足條件,第一行以字母字符或空間,並用相同的所述第二開始啓動。加入他們的空間。

+0

謝謝,對我很好。 – Marcelo

1

與sed的另一種方法:

sed '/^[[:alpha:]]/{N;/\n[[:alpha:]]/s/\n/ /}' file 

當開始與字母字符的線被發現,下一行添加到使用N命令模式空間。然後用空格替換換行符後跟字母字符。

+0

非常棒 - 非常感謝。對我來說真的很好。 – Marcelo