Linux

sed 有幾場比賽

  • January 20, 2011

兩條“sed 行”僅在下面有一個“\n”不同。

我怎樣才能得到這個輸出[在</pre>] 之前沒有新行?[ http://pastebin.com/raw.php?i=ED34jvtF ]:

.

.

something3

</pre>

something4

.

.

$ echo -e 'something1\nsomething2\nsomething3\n\n</pre>\nsomething4\nsomething5'; echo "######################################"; echo -e 'something1\nsomething2\nsomething3\n\n</pre>\nsomething4\nsomething5' | sed -e N -e N -e "s#\n</pre>#</pre>#g" -e P -e D

something1

something2

something3

</pre>

something4

something5

######################################

something1

something2

something3</pre>

something4

something5

$

$ echo -e 'something1\nsomething2\nsomething3\n\n</pre>\nsomething4\nsomething5' | sed -e N -e N -e "s#\n</pre>#\n</pre>#g" -e P -e D

something1

something2

something3

</pre>

something4

something5

$

試試這個:

sed 's|\(.\+\)\(</pre>\)$|\1\n\2|;t;N;\|\n</pre>$|s|^[[:blank:]]*\n||;P;D' inputfile

結果:

something1
something2
something3
</pre>
something4
something5
######################################
something1
something2
something3
</pre>
something4
something5

請注意, 的兩個實例</pre>都單獨在一行上,而前面沒有空行。

**編輯:**修復了刪除錯誤行的問題。

引用自:https://serverfault.com/questions/224391