Bash

sed:抓取和替換最後一個反斜杠和逗號之間的所有數據

  • June 15, 2016

我有一個 csv 格式的數據,如下所示:

F1309-042543,07/14/09 01:39:25,N/A,C:\windows\system32\netsh.exe,N/A,True
F1309-042543,11/21/10 03:24:02,N/A,C:\Windows\System32\networkexplorer.dll,N/A,False
F1309-042543,07/14/09 01:38:53,N/A,C:\windows\system32\scrnsave.scr,N/A,True
F1309-042543,11/21/10 03:25:10,N/A,C:\windows\SYSTEM32\WISPTIS.EXE,N/A,True
F1309-042543,05/03/14 22:05:42,N/A,C:\windows\ccmcache\4t\SafeNet High Assurance Client (x64) 2.12.009.exe,N/A,True

如何進入第四個欄位(Windows 路徑)並獲取程序名稱(最後一個 ‘' 字元,直到後面的逗號),然後將該程序名稱添加為自己的欄位,用逗號分隔?最終結果將如下所示:

F1309-042543,07/14/09 01:39:25,N/A,C:\windows\system32\netsh.exe,netsh.exe,N/A,True
F1309-042543,11/21/10 03:24:02,N/A,C:\Windows\System32\networkexplorer.dll,networkexplorer.dll,N/A,False
F1309-042543,07/14/09 01:38:53,N/A,C:\windows\system32\scrnsave.scr,scrnsave.scr,N/A,True
F1309-042543,11/21/10 03:25:10,N/A,C:\windows\SYSTEM32\WISPTIS.EXE,WISPTIS.EXE,N/A,True
F1309-042543,05/03/14 22:05:42,N/A,C:\windows\ccmcache\4t\SafeNet High Assurance Client (x64) 2.12.exe,SafeNet High Assurance Client (x64) 2.12.exe,N/A,True

簡而言之,我想從該 Windows 路徑中取出程序名稱,並使其在 CSV 中成為自己的欄位。我懷疑 sed 是執行此操作的工具,但我不知道該怎麼做。非常感謝你。

這對我來說不是 100% 清楚,因為您的預期結果看起來與文件內容相同,但讓我試一試。

如果您只需要此列表中的文件名:

cat thebigfile.csv | rev | cut -d'\' -f1 | rev | cut -d',' -f1 

結果將是:

netsh.exe
networkexplorer.dll
scrnsave.scr
WISPTIS.EXE
SafeNet High Assurance Client (x64) 2.12.exe

這有幫助嗎?

sed

sed 's/.*\\\([^,]*,\)/&\1/' file

輸出:

F1309-042543,07/14/09 01:39:25,N/A,C:\windows\system32\netsh.exe,netsh.exe,N/A,True
F1309-042543,11/21/10 03:24:02,N/A,C:\Windows\System32\networkexplorer.dll,networkexplorer.dll,N/A,False
F1309-042543,07/14/09 01:38:53,N/A,C:\windows\system32\scrnsave.scr,scrnsave.scr,N/A,True
F1309-042543,11/21/10 03:25:10,N/A,C:\windows\SYSTEM32\WISPTIS.EXE,WISPTIS.EXE,N/A,True
F1309-042543,05/03/14 22:05:42,N/A,C:\windows\ccmcache\4t\SafeNet High Assurance Client (x64) 2.12.009.exe,SafeNet High Assurance Client (x64) 2.12.009.exe,N/A,True

順便說一句,請注意^M而不是\n在您的原始文件中。

引用自:https://unix.stackexchange.com/questions/289987