2010-05-07 99 views
2

新來的sed,可以使用一些幫助。 我想將這個「a/b/c a/b/c」變成這個「a/b/c a-b-c」。 其中a/b/c是任何路徑。sed字符替換部分行

感謝

+0

您可以確認丹尼斯的解決方案,這將捐出他的一些點,並作爲解決(而不是,或附加到你的感謝PROSA)標記您的問題。 – 2010-05-08 14:51:03

回答

1

試試這個:

sed 'h; s/ .*//; x; s/.* //; s:/:-:g; x; G; s/\n/ /' 
+0

完美,非常感謝! – BobBobBob 2010-05-07 22:24:48

+0

@BobBobBob:我很高興你覺得它可以接受。 ;-) – 2010-05-07 23:44:26

0

既然你想用空白來delemit,我只是用perl:

perl -ane '$F[1] =~ s/\//-/; print "@F\n"' 
+0

感謝您的回覆 在一個空格定義了行的第二部分之後 我試過了您的第一個建議,但它不適用於我 echo「a/b/ca /​​ b/c」| sed's @ \( 。* \) - @ \ 1/@ g' a/b/ca /​​ b/c – BobBobBob 2010-05-07 16:33:04

+0

對不起,當我粘貼第一個圖案時,不知道發生了什麼;它顯然是完全錯誤的。但是,如果你想使用空白分隔,perl的方式更加健壯。 – Cascabel 2010-05-07 16:38:55

0

您可以用awk,

$ echo "a/b/c a/b/c" | awk '{gsub("/","-",$NF)}1' 
a/b/c a-b-c 
0

這可能工作:

echo "a/b/c a/b/c" | sed ':a;s|\(.* [^/]*\)/|\1-|;ta' 
a/b/c a-b-c 

或者這樣:

echo "a/b/c a/b/c" | sed 's/.* //;h;y/\//-/;x;G;y/\n/ /' 
a/b/c a-b-c