pcut 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +9 -0
- data/Manifest.txt +0 -1
- data/README.rdoc +19 -3
- data/bin/pcut +9 -0
- data/lib/pcut.rb +1 -1
- data/lib/pcut/cli.rb +16 -1
- data/lib/pcut/line_parser.rb +15 -3
- data/spec/lib/pcut/line_parser_spec.rb +7 -0
- metadata +2 -3
- data/.README.rdoc.swp +0 -0
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
data/README.rdoc
CHANGED
@@ -64,9 +64,25 @@ You can set multiple chars to quote.
|
|
64
64
|
|
65
65
|
=== sub queries
|
66
66
|
|
67
|
-
|
68
|
-
|
69
|
-
|
67
|
+
You can get partial string by cutting the cut result again
|
68
|
+
with original syntax [/#{delimiter}/, #{index}].
|
69
|
+
This is useful for getting platform from UserAgent, or getting file extention
|
70
|
+
string from PATH.
|
71
|
+
|
72
|
+
$ cat test | pcut -d " " --preview --vertical -q "D[" -k -f "4, 5"
|
73
|
+
[4][10/Oct/2000:13:55:36 -0700]
|
74
|
+
[5]"GET /apache_pb.gif HTTP/1.0"
|
75
|
+
|
76
|
+
$ cat test | pcut -d " " --preview --vertical -q "D[" -k -f "4, 5.[/ /,2]"
|
77
|
+
[4][10/Oct/2000:13:55:36 -0700]
|
78
|
+
[5.[/ /,2]]/apache_pb.gif
|
79
|
+
|
80
|
+
$ cat test | pcut -d " " --preview --vertical -q "D[" -k -f "4, 5.[/ /,2].[/./,2]"
|
81
|
+
[4][10/Oct/2000:13:55:36 -0700]
|
82
|
+
[5.[/ /,2].[/./,2]]gif
|
83
|
+
|
84
|
+
$ cat test | pcut -d " " -q "D[" -k -f "4, 5.[/ /,2].[/./,2]"
|
85
|
+
[10/Oct/2000:13:55:36 -0700] gif
|
70
86
|
|
71
87
|
== SYNOPSIS:
|
72
88
|
|
data/bin/pcut
CHANGED
@@ -50,6 +50,15 @@ end
|
|
50
50
|
opt.on('-n', '--no-color', 'turn colot output off') do
|
51
51
|
cli.color = false
|
52
52
|
end
|
53
|
+
opt.on('-c', '--skip-continuous-deimiters',
|
54
|
+
'treat continuous delimiters as one delimiter') do
|
55
|
+
cli.skip_continuous_delimiters = true
|
56
|
+
end
|
57
|
+
opt.on('-j JOIN', '--join JOIN',
|
58
|
+
'JOIN specifies the letter used to join cut result.',
|
59
|
+
'You can use "TAB" to specify tab character.') do |v|
|
60
|
+
cli.set_joiner(v)
|
61
|
+
end
|
53
62
|
|
54
63
|
begin
|
55
64
|
opt.parse!(ARGV)
|
data/lib/pcut.rb
CHANGED
data/lib/pcut/cli.rb
CHANGED
@@ -19,7 +19,8 @@ module Pcut
|
|
19
19
|
:keep_quote,
|
20
20
|
:preview,
|
21
21
|
:vertical,
|
22
|
-
:color
|
22
|
+
:color,
|
23
|
+
:skip_continuous_delimiters
|
23
24
|
|
24
25
|
def initialize
|
25
26
|
@delimiter = "\t"
|
@@ -30,6 +31,19 @@ module Pcut
|
|
30
31
|
@preview = false
|
31
32
|
@vertical = false
|
32
33
|
@color = true
|
34
|
+
@skip_continuous_delimiters = false
|
35
|
+
end
|
36
|
+
|
37
|
+
def set_joiner(char)
|
38
|
+
if char == "TAB"
|
39
|
+
@joiner = "\t"
|
40
|
+
return
|
41
|
+
end
|
42
|
+
if char.size != 1
|
43
|
+
STDERR.puts "join char must be 1 byte char or 'TAB'"
|
44
|
+
exit(1)
|
45
|
+
end
|
46
|
+
@joiner = char
|
33
47
|
end
|
34
48
|
|
35
49
|
def parse_field(str)
|
@@ -74,6 +88,7 @@ module Pcut
|
|
74
88
|
begin
|
75
89
|
parser = Pcut::LineParser.new
|
76
90
|
parser.set_delimiter(@delimiter)
|
91
|
+
parser.skip_continuous_delimiters = @skip_continuous_delimiters
|
77
92
|
@quote.each_char { |c| parser.set_quote_guard(c) } if @quote
|
78
93
|
parser.keep_quotes = true if @keep_quote
|
79
94
|
rescue => e
|
data/lib/pcut/line_parser.rb
CHANGED
@@ -17,13 +17,18 @@ module Pcut
|
|
17
17
|
}
|
18
18
|
DELIMITER = "\t"
|
19
19
|
|
20
|
-
|
21
|
-
|
20
|
+
attr_accessor \
|
21
|
+
:quote_guard,
|
22
|
+
:keep_quotes,
|
23
|
+
:skip_continuous_delimiters
|
22
24
|
|
23
25
|
def initialize
|
24
26
|
@quote_guard = {}
|
25
27
|
@delimiter = DELIMITER
|
26
|
-
|
28
|
+
# do not delete quoting chars
|
29
|
+
@keep_quotes = false
|
30
|
+
# treat continuous delimiters as one delimiters
|
31
|
+
@skip_continuous_delimiters = false
|
27
32
|
end
|
28
33
|
|
29
34
|
def set_quote_guard(quote)
|
@@ -49,6 +54,13 @@ module Pcut
|
|
49
54
|
|
50
55
|
str.each_char do |c|
|
51
56
|
|
57
|
+
# skip continuous delimiters
|
58
|
+
if skip_continuous_delimiters &&
|
59
|
+
@delimiter == c &&
|
60
|
+
@delimiter == previous_char
|
61
|
+
next
|
62
|
+
end
|
63
|
+
|
52
64
|
# check starting quote
|
53
65
|
if @quote_guard.include?(c) &&
|
54
66
|
previous_char != "\\" # not escaped
|
@@ -182,6 +182,13 @@ describe Pcut::LineParser do
|
|
182
182
|
|
183
183
|
end
|
184
184
|
|
185
|
+
it 'skips continuous delimiters if needed' do
|
186
|
+
@parser.skip_continuous_delimiters = true
|
187
|
+
@parser.set_delimiter(" ")
|
188
|
+
result = @parser.parse("1979 8 23 bonar ")
|
189
|
+
result.should == ['1979', '8', '23', 'bonar']
|
190
|
+
end
|
191
|
+
|
185
192
|
describe 'real world sample' do
|
186
193
|
|
187
194
|
before(:each) do
|
metadata
CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.2
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Nakano Kyohei (bonar)
|
@@ -94,7 +94,6 @@ extra_rdoc_files:
|
|
94
94
|
- PostInstall.txt
|
95
95
|
- README.rdoc
|
96
96
|
files:
|
97
|
-
- .README.rdoc.swp
|
98
97
|
- History.txt
|
99
98
|
- Manifest.txt
|
100
99
|
- PostInstall.txt
|
data/.README.rdoc.swp
DELETED
Binary file
|