2016-04-06 31 views
-2

如何使用awk或sed等unix工具更改文件行中的數字? 我想使用shell腳本將示例文件中的第3行更改爲數字1-10。我想我需要使用正則表達式來識別數字,但我不知道如何做到這一點,或允許多個數字(如10)。unix更改shell腳本中給定行號的數字值for循環

示例文件:

/examples/are/hard so/hard/1 

shell腳本至今:

for i in {1..3}; 
do 
sed 's|/examples/are/hard so/hard/7 | /examples/are/hard so/hard/'"$i" ex_file 
cat ex_file 
done 

所需的輸出:

/examples/are/hard so/hard/1 
/examples/are/hard so/hard/2 
/examples/are/hard so/hard/3 
+0

爲什麼你運行一個循環,你的期望輸出是什麼? – anubhava

+0

我正在使用qsub來運行批處理腳本。我想要更改每個腳本中發送的目錄號qsub。在這個例子中,預期的結果是示例文件剩下一個10而不是3. – kilojoules

+0

我用一個更具體的例子進行了更新。 – kilojoules

回答

1

什麼你運行的是不是一個有效的sed命令。如果您嘗試進行替換,那是s/search/replace/flags

我想你的意思是:

sed 's/here\/is the number\/to\/change 3/here\/is the number\/to\/change '"$i"'/' ex_file 

請注意,我們暫時擺脫單引號的。在單引號內部,變量不會被插值。我們交換雙引號,引入$i,然後返回單引號完成命令。

P.S.你也don't have to使用/作爲你的分隔符。

sed 's|here/is the number/to/change 3|here/is the number/to/change '"$i"'|' ex_file 
+0

謝謝!硬連線3對我的情況不起作用,因爲在每次循環迭代期間數字都會改變。 – kilojoules

+0

是的,它應該。 '$ i'不在雙引號之內,所以它會在每次迭代時插入。 –

+0

'這裏\ /是數字\/\ /更改3'語句硬連線3英寸。 – kilojoules