1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
--[[
module for format changes in table,string,files...
try to keep non input specific
]]--
module (..., package.seeall)
require ("posix")
require ("fs")
require ("session")
-- find all return characters and removes them, may get this from a browser
-- that is why didn't do file specific
function dostounix ( a )
local data = string.gsub(a, "\r", "")
return data
end
-- search and remove all blank lines and commented lines in a file or table
function remove_blanks_comments ( path )
if type(path) == "string" then
if fs.is_file == "false" then
error("Invalid file!")
else
f = fs.read_file_as_array(path)
end
elseif type(path) == "table" then
f = path
end
local lines = {}
for a,b in ipairs(f) do
local c = string.match(b, "^$") or string.match(b, "^%#")
if c == nil then lines[#lines + 1] = b end
end
-- returns a table to iterate over without the blank or commented lines
return lines
end
--great for search and replace through a file or table.
--string is easy string.gsub(string, find, replace)
--path can be either a file or a table
function search_replace (path, find, replace)
--would be a string if is a path to a file
if type(path) == "string" then
if fs.is_file == "false" then
error("Invalid file!")
else
f = fs.read_file_as_array(path)
end
elseif type(path) == "table" then
f = path
end
local lines = {}
for a,b in ipairs(f) do
local c = string.gsub(b, find, replace)
lines[#lines + 1] = c end
return lines
end
--great for line searches through a file. /etc/conf.d/ ???
--might be looking for more than one thing so will return a table
--will likely want to match whole line entries
--so we change find to include the rest of the line
-- say want all the _OPTS from a file format.search_for_lines ("/etc/conf.d/cron", "OPT")
function search_for_lines (path, find )
find = "^.*" .. find .. ".*$"
if type(path) == "string" then
if fs.is_file == "false" then
error("Invalid file!")
else
f = format.remove_blanks_comments(path)
end
elseif type(path) == "table" then
f = path
end
--don't want to match commented out lines
local lines = {}
for a,b in ipairs(f) do
local c = string.match(b, find)
lines[#lines +1 ] = c end
return lines
end
--string format function to cap the beginging of each word.
function cap_begin_word ( str )
--first need to do the first word
local data = string.gsub(str, "^%l", string.upper)
--word is any space cause no <> regex
data = string.gsub(data, " %l", string.upper)
return data
end
--give a table of ipairs and turn it into a string
function ipairs_to_string ( t )
for a,b in ipairs(t) do
if a == 1 then
d = b
else
d = d .. "\n" .. b
end
end
return d
end
-- This code comes from http://lua-users.org/wiki/SplitJoin
-- -- example: format.table_to_string(", ", {"Anna", "Bob", "Charlie", "Dolores"})
function table_to_string (delimiter, list)
local len = getn(list)
if len == 0 then
return ""
end
local string = list[1]
for i = 2, len do
string = string .. delimiter .. list[i]
end
return string
end
--for cut functionality do something like
--print(format.string_to_table(" ", "This is a test")[2])
--gives you the second field which is .... is
-- This code comes from http://lua-users.org/wiki/SplitJoin
-- example: format.string_to_table(",%s*", "Anna, Bob, Charlie,Dolores")
function string_to_table (delimiter, text)
local list = {}
local pos = 1
-- this would result in endless loops
if string.find("", delimiter, 1) then
error("delimiter matches empty string!")
end
while 1 do
local first, last = string.find(text, delimiter, pos)
if first then -- found?
table.insert(list, string.sub(text, pos, first-1))
pos = last+1
else
table.insert(list, string.sub(text, pos))
break
end
end
return list
end
|