如何自動修改 txt 文字檔內容 [論壇 - Ubuntu 與工具程式及軟體推薦]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



如何自動修改 txt 文字檔內容
會員一級
註冊日期:
2014/4/9 15:04
所屬群組:
已註冊使用者
等級: 1
HP : 0 / 2
MP : 1 / 43
EXP: 10
離線
您好,

請教一個問題,於 Ubuntu 系統內,有一個副檔名為 txt 的文字檔,該文字檔內容大概如下:(範例)

00001 00 Trojan-Downloader.Win32.Geral.cnh
00002 00 Trojan-Dropper.VBS.Agent.bp
00003 00 Trojan-Clicker.JS.FbLiker
00004 00 Net-Worm.Win32.Kido.ir
00005 00 Email-Worm.Win32.Brontok.q
00006 00 Worm.Win32.Flame.a
00007 00 Backdoor.Win32.MiniFlame.a
00008 00 Worm.VBS.Dinihou.r
00009 00 Net-Worm.Win32.Kido.ih

有兩個問題想請教,

1.如何透過 Script 或 tools,將該文字檔內容,特定的行數與字串刪除?
譬如自動將 00002 整行刪除.

2.如何可以自動將該文字檔,特定字串(譬如:有含Flame的字串)的行數整個
搬移到文字檔最前面.
譬如:(搬移後的文字檔內容)

00006 00 Worm.Win32.Flame.a
00007 00 Backdoor.Win32.MiniFlame.a
00001 00 Trojan-Downloader.Win32.Geral.cnh
00002 00 Trojan-Dropper.VBS.Agent.bp
00003 00 Trojan-Clicker.JS.FbLiker
00004 00 Net-Worm.Win32.Kido.ir
00005 00 Email-Worm.Win32.Brontok.q
00008 00 Worm.VBS.Dinihou.r
00009 00 Net-Worm.Win32.Kido.ih

3.執行 1 與 2 修改之後,該文字檔能夠自動儲存

2014/4/9 15:27
應用擴展 工具箱
回覆: 如何自動修改 txt 文字檔內容
管理員
註冊日期:
2012/1/14 18:41
所屬群組:
討論區管理群
等級: 20
HP : 0 / 480
MP : 159 / 10795
EXP: 23
離線
sed --in "1! {p;d};:1;$(($location-1))! {N;b1};h;n;p;g;p" test
這段是以前我用來做根你一樣事情的東西。test是檔案
location 就是你要移動到最上面的那行位置。

sed -n '4 {d;n};p' test
這個式刪除
修改最前面的數字,就可以移除相對應的行數,不過這個是檔案的行數,不是你自己寫的行號。

2014/4/9 22:19
應用擴展 工具箱
回覆: 如何自動修改 txt 文字檔內容
會員一級
註冊日期:
2014/4/9 15:04
所屬群組:
已註冊使用者
等級: 1
HP : 0 / 2
MP : 1 / 43
EXP: 10
離線
感謝您的指導,

請問一下,如果我想要刪除的是指定的 ID Number 行號,不是檔案內容的行數,
因為此 txt 檔內容每天會更新,指定檔案行數刪除會有誤判情況,但都有固定的 ID Number,是否可以達成呢? 此外也必須移動特定的 ID Number 行號至檔案最前面.

Thanks

2014/4/10 14:57
應用擴展 工具箱
回覆: 如何自動修改 txt 文字檔內容
會員一級
註冊日期:
2014/4/9 15:04
所屬群組:
已註冊使用者
等級: 1
HP : 0 / 2
MP : 1 / 43
EXP: 10
離線
Dear all,

請問有人知道這個問題要如何解嗎?
或是提供一個方向或是工具都可以.
非常謝謝.

2014/4/15 19:07
應用擴展 工具箱
回覆: 如何自動修改 txt 文字檔內容
會員二級
註冊日期:
2011/10/7 0:22
所屬群組:
已註冊使用者
等級: 7
HP : 0 / 157
MP : 23 / 3650
EXP: 28
離線
或許可以用awk,底下是我測試的指令,可以全部寫成一行:



awk '
BEGIN{a=0;b=0}
{if($0~/^00006/){head[a]=$0;a=a+1}else{orgin[b]=$0;b=b+1}}
END{for(i=0 ; i< a; ++i){print head[i]};for(i=0;i<b;++i){print orgin[i]}}
' test02.txt > test03.txt


其中,$0是代表檔案的每一行全部的內容,/^00006/是正規表示法,『^』代表位置開頭,『~』代表尋找符合項目。

如果要多個條件,awk應該可以用:
if($0~/^00006/ || $0~/^00007/){動作}

2014/4/15 20:06
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.