2014-04-02 29 views
1

是否可以用sed替換某一行範圍內的/ n(例如,用空格)?在某一行範圍內用sed替換換行

這裏是一個沒有範圍過濾器的示例。是否有可能在sed中設置一個範圍?

for f in `find ${_filedir} -type f` 
do 
    #replace all LF with spaces 
    sed 's/\n/ /g' ${f} > ${f}.noCR 
done 

好吧,這裏的樣本:

讓我們採取一些行:

「我想掙脫,現在」
「和朋友是朋友」

我想用範圍爲0到16的「m」代替任何「n」,其結果如下:

我想打破免費現在」
的AMD friemds將是朋友」

+0

你試過運行此代碼?我認爲它不起作用。 –

+0

這只是一個顯示上下文的片段。 sed命令工作正常,但沒有範圍限制。 –

回答

2

編輯再次

嘗試awk

awk '{l=substr($0,1,10);r=substr($0,11);gsub(/n/,"m",l);print l r}' file 

其中l是字符串的左側部分,r是right和gsub()做全局替換。

編輯

我可能會使用該猛砸參數替代 - 文檔here

#!/bin/bash 
while read line 
do 
    left=${line:1:16} # Get left 16 chars 
    right=${line:17}  # Get remainder of line 
    left=${left//n/m} # Do global replacement in left part 
    echo $left $right # Show output 
done < file 

原來的答覆

當然,剛上線2-8

sed '2,8s/foo/bar/' file 

或者,開始和結束模式:

sed '/start/,/end/s/foo/bar/' file 
+0

對不起,我的問題有點不清楚:我不是指範圍的線,而是範圍內的線。 這不是\ n。它可以是任何角色。 問題是:是否可以用sed限制一行內的範圍! –

+0

大概吧!請用一個或兩個您的意思更新您的問題,顯示您的輸入和輸出數據。 –

+0

我已經更新了我的答案,把女王可愛的歌詞搞亂了! –