2014-11-06 78 views
0

我想知道什麼是錯的,爲什麼後SED刪除第一個字符:替換模式

b="inst.;inst" ; echo $b | sed -e 's/\.;[^ ]/\n /' inst nst

期望輸出

inst 
inst 

感謝您事先的任何線索太多。

+0

爲什麼在這種情況下[^]'(樣本)?這肯定是一個更復雜的案例的一部分,可能會出現一些空間(或其他)。 – NeronLeVelu 2014-11-06 17:14:19

回答

4

你的圖中的三個字符匹配。一段時間,一個分號和一些非空格字符。然後用兩個字符(換行符和空格)替換所有這三個字符。

所以你的模式匹配.;i,你用\n替換它。

您需要捕獲並重新插入該非空格字符。

在模式中使用\([^ ]\),使用\n \1作爲替換。

2

您正在更換研究所,捕獲的第一個字符,並保留它,而不是,即

sed -e 's/\.;\([^ ]\)/\n \1/' 
+0

太感謝了,+1,但沒有選擇,因爲它沒有被解釋爲Etan所做的。 – 2014-11-06 16:37:30

0

或者只是改變你的命令爲b =「inst。; inst」; echo $ b | sed -e's /。;/\ n /' 替換。用換行符

+1

這隻適用於沒有任何'; '他不想替換的參賽作品。 – 2014-11-06 16:36:38