2017-04-11 19 views
0

使用Linux中的文件並需要操作文件以插入指定開始和結束位置的字符串。我只是在學習如何使用腳本語言,並且我通過幾個sed示例來尋找,但沒有做到我需要的東西。所以我的目標是用位置20到位置33開始的相同字符串替換文件中的每一行。每個記錄長約2000個字符。用只有8個字符的字符串替換14個字符跨度。 「A0000CDD」Linux使用sed命令來更改文件中所有記錄的開始和結束位置的字符串

因此,開始的

2017-04-01 01:13:20<11102233HRDS>30511version=1.0..... 2017-04-01 01:13:20<11102234HRDS>30511version=1.0..... 2017-04-01 01:13:20<11102235HRDS>30511version=1.0..... 2017-04-01 01:13:20<11102236HRDS>30511version=1.0.....

記錄應該結束,因爲

2017-04-01 01:13:20A0000CDD30511version=1.0..... 2017-04-01 01:13:20A0000CDD30511version=1.0..... 2017-04-01 01:13:20A0000CDD30511version=1.0..... 2017-04-01 01:13:20A0000CDD30511version=1.0.....

所有SED例子似乎要替換的模式,我只需要更換相同的位置與相同的字符串。

作爲一個說明,我可以通過輸入文件的每個記錄並操作每個記錄並輸出到另一個文件來完成此操作。問題是這些文件將包含幾百萬條記錄,並且處理時間過長。

欣賞的幫助

MG

+1

請問圖案是與'開始<'和與'結束>'一個字符串? – JNevill

+0

< >模式顯示在每行的幾個地方。 –

回答

0

隨着GNU sed的:

sed -r 's/(.{19}).{14}(.*)/\1A0000CDD\2/' file 

輸出:

 
2017-04-01 01:13:20A0000CDD30511version=1.0..... 
2017-04-01 01:13:20A0000CDD30511version=1.0..... 
2017-04-01 01:13:20A0000CDD30511version=1.0..... 
2017-04-01 01:13:20A0000CDD30511version=1.0..... 

如果你想編輯文件 「就地」 用sed的選項-i

+0

謝謝你,賽勒斯。該命令完全按照我的需要工作。 –

1

AWK替代:

awk -F" |=" '{FS=OFS;gsub(/<.{12}>/,"A0000CDD",$2)} 1' file 

輸出:

2017-04-01 01:13:20A0000CDD30511version 1.0..... 
2017-04-01 01:13:20A0000CDD30511version=1.0..... 
2017-04-01 01:13:20A0000CDD30511version=1.0..... 
2017-04-01 01:13:20A0000CDD30511version=1.0..... 
相關問題