thc 在 VB6之迴光返照 系列文中,
提及 VB6 如何把檔案中的每行的前面幾個字元刪除,
每行前頭或後面加字串的解決方案;
而類似這樣的處理字串問題,
Linux 的工具程式,透過簡單的語法即能完成。
每行前加行號
假設一段程式碼的檔案 raw.txt 內容為:
Open App.Path & "\log.txt" For Output As #1 '存到log.txt
Print #1, TxtMain 'strsql是變數名稱
Close #1
Dim a, i, intN
intN = InputBox("請輸入 n 的值", "請輸入 n 的值", 1)
Open App.Path & "\log.txt" For Input As #1 '載入 檔案 log.txt
While Not EOF(1)
Line Input #1, a
List1.AddItem a '增加list1.additem
Wend
Close #1
要加上行號的話,
awk '{print NR"."$0}' raw.txt
awk '{length(NR)==1?no="0"NR:no=NR; print no"."$0}' raw.txt
上面兩行指令都可自行加行號,
第二行只是對行號為單位數,前面補個零。
刪除各行的行號
而要把各行號給刪除,
類似像這樣的內容:
08. Line Input #1, a
09. List1.AddItem a '增加list1.additem
10. Wend
11. Close #1
可以用以下的方式來把前面的行號清除掉。
sed -e 's/^[0-9]*\.//g' raw2.txt
各行之前或後加字串
用 awk 或 sed 都非常容易,
#前頭加個 ☆ 字串
awk '{print "☆"$0}' filename
sed -e 's/\(.*\)/☆\1/g' filename
#每行後加 ☆ 字串
awk '{print $0"☆"$' filename
sed -e 's/\(.*\)/\1☆/g' filename
用ruby程式處理
上述是用Linux內建的工具執行,
如果是要程式來做這些事的話,
大概也可以用一行的方式就解決了:
編輯一個檔案叫 add.rb 內容為:
File.read(ARGV[0]).split("\n").each {|line| puts "☆#{line}"}
執行 ruby add.rb filename 就會每行前面加個星號印出。
若要除行號,內容為:
File.read(ARGV[0]).split("\n").each {|line|puts line.gsub(/^\d+\./,'')}
同上面的執行方式,
就可把前面的行號給清除掉。
純就 文字處理 的議題而言,
Linux所提供的環境是相當簡潔的。