2011-03-29 87 views
0

在以下很長的行樣本中,如何將"***"追加到行尾?shell腳本追加到很長的行

在sed中嘗試使用「$」,但替換髮生在行尾,但附近,在350列後面結束。請參見下面的"***"

tail -n+2 filename.dat | sed s/"$"/"***"/ 

[email protected]|111150151744782|99149327|NONM|20110325|20110605|TE201107E||ESOK1A||2002|2003A|2004A|2005|2007|2008|2009|2010|2011|2012|2014A|2016|2017A|2018|2019|2020|2021A|3001|3002|4001A|4002|4003|4004|4005A|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||8A12329A***833493A9C52EF5D66419ED5|016|zzzzzz|41606299952 

回答

4

試試這個:sed 's/$/*/g'

(我在Ubuntu使用bash

+0

爲了擴大對,問題是,你把雙引號周圍的'$ '和'*'_side_正則表達式。他們應該去_outside_,所以shell使用它們。 – 2011-03-29 20:47:08

+1

@Tom更多,所以他使用*雙引號代替*單引號。你**不希望shell解釋'$'或'*',所以必須使用單引號 – SiegeX 2011-03-29 20:50:45

+1

'g'標誌表示'全局執行替換'。由於匹配模式是/ $/which = s的行尾,因此不需要使用'g'。 – shellter 2011-03-29 21:06:18

0

還有其他的方法可以做到追加。追加基本上只是將某些東西附加到已經存在的字符串中。 「替代」是沒有必要的。只需打印出你想要的結果就足夠了。

殼:

$ var=$(tail -n+2 filename.dat) 
    $ echo "${var}***" 

AWK:

$ tail -n+2 filename.dat | awk '{print $0"***"}' 

紅寶石(1.9+)

$ ruby -ne 'puts $_.chomp+"***"' file