2014-10-11 169 views
2

我有一個包含成千上萬行的像這樣的文件:如何編輯與shell腳本文件

0x7f29139ec6b3: W 0x7fff06bbf0a8
0x7f29139f0010: W 0x7fff06bbf0a0
0x7f29139f0014: W 0x7fff06bbf098
0x7f29139f0016: W 0x7fff06bbf090
0x7f29139f0036: R 0x7f2913c0db80

我想建立一個新文件其中每行只包含第二個十六進制數字(以粗體標出的部分)

我必須將所有這些十六進制數字放在一個C程序中的數組中。所以我試圖在右側創建一個只有十六進制數字的文件,以便我的C程序可以使用fscanf函數從修改後的文件中讀取這些數字。

我想我們可以使用一些shell腳本來創建一個包含這些十六進制數字的文件嗎? grep什麼的?

回答

0

可以使用grep -oP命令:

grep -oP ' \K0x[a-fA-F0-9]*' file 
0x7fff06bbf0a8 
0x7fff06bbf0a0 
0x7fff06bbf098 
0x7fff06bbf090 
0x7f2913c0db80 
+0

這是真的,但爲什麼你需要一個自定義字段分隔符?爲什麼不寫'awk'{print $ 3}'文件'(或'cut -f 3 file')? – ruakh 2014-10-11 18:37:22

+0

@anubhava,是的,它的作品。但我仍然有一個小問題。我有一些線,如:0x7f29139f0018:W 0x7fff06bbf088 0x7f29139f001a:W 0x7fff06bbf080 0x7f29139f001c:W 0x7fff06bbf078 0x7f29139f0036,R 0x7f2913c0db80 0x7f29139f003d:W 0x7f2913c0dcd8 0x7f29139f0047,R 0x7f2913c0dfb8,所以你看到有以 'W' 或「R線」。我給的前四行只有'W'。但是如何使這個工作包含'R'的行呢? – sps 2014-10-11 18:46:11

+0

請不要在評論中發佈數據,編輯您的問題並將其發佈到那裏。你也沒有告訴問題是什麼? – anubhava 2014-10-11 18:48:41

1

您可以使用SED和編輯就地。對於符合 「R」 或任何其他字符使用

SED -i 「S /.*:..// G」 文件

cat file 
0x7fff06bbf0a8 

0x7fff06bbf0a0 

0x7fff06bbf098 

0x7fff06bbf090 
0

因爲它似乎你總是要選擇第三場,最簡單的方法是使用cut

cut -d ' ' -f 3 file 

awk

awk '{print $3}' file 
+1

'cut'默認情況下不會在空白處分割。如果分隔符恰好是一個單獨的空格,那麼'cut -d''-f 3'將會起作用,但是'cut -f 3'不會。 – 2014-10-11 19:02:43

+0

@MarkReed:Eep,你說得對!不知何故,我決定我們正在處理標籤。將解決,謝謝。 – ruakh 2014-10-11 19:05:25

0

您可以將創造你想要的格式的新文件,該文件運行命令:somecommand < 的oldfile>newfile中。這將使原始文件保持原樣併爲您創建一個新的文件以供給您的C程序。

至於什麼some命令應該是,你有多個選項。最簡單的可能是awk

awk '{print $NF}' 

但你也可以做到這一點與sedgrepperlcut ...看到其他的答案爲選擇的尷尬。