pcut 0.0.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|