2015-05-27 86 views
0

使用sed我想通過在每行末尾添加當前行數來處理文件。如何在sed中打印替換命令內的當前行數?

例如,給定textfile.txt,含有:

$ cat textfile.txt 
word 
letters 
music 

變爲:

$ sed '<magic sed commands>' textfile.txt 
word line1 
letters line2 
music line3 

awk,例如,我可以做到這一點如下:

$ awk '{print $1"\tline"NR;}' textfile.txt 
word line1 
letters line2 
music line3 

I」我試過在sed玩=,但沒有得到尊重在替換's///'塊內,即's///; ='工作,但's//=/'顯然不(字面解釋=)。

+2

爲什麼你需要它在sed,當你可以在awk中做到這一點? – choroba

+0

@choroba所以我想知道它是如何以多種方式完成的?例如,我可以用'bash','python','C'等來做,但想知道它是否可以用sed完成(以及如何)。 –

+0

請參見[編號行](http://www.gnu.org/software/sed/manual/sed.html#cat-_002dn)。請記住,如果您有其他選擇(通常您會這樣做),您仍然不應該在'sed'中執行此操作。在同一頁面上還有其他計數示例。 –

回答

2

嘗試對GNU sed的:

sed -n 'p;=' file | sed 'N;s/\n/\tline/' 

輸出:

 
word line1 
letters line2 
music line3 
+0

這實際上也適用於POSIX sed。 – bkmoney

+0

對於OS X(BSD)sed,我正在運行此測試,需要插入文字''字符,'\ t'即使在強烈引用時也不起作用: '$ sed - n'p; ='文件| sed「N; s/\ n/$(printf'\ t')line /」#bash-specific' or: '$ sed -n'p; ='file | sed'N; s/\ n/[CTRL + V,] line /'#still bash-specific' –

+0

你可以用bash試試這個:'sed -n'p; ='file | sed「N; s/\ n /」$'\ t'「line /」' – Cyrus

0
grep -n '' YourFile | sed 's/^\([0-9]*\):\(.*\)/\2 line \1/' 

,因爲sed的不容易允許在1個SED動作腳本任務,i個使用grep線和sed後。 可能在sed中編號(=無法幫助,因爲它會將信息發送到輸出而不是工作緩衝區,所以不會對其執行任何操作),而是一個非常繁重的操作,其中的其他工具會在套索中進行手指操作(例如awk快速替代這裏後)

awk '{print $0 " line " NR}' YourFile