BusyBox v1.22.1 (2014-11-14 10:11:32 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -| || | | || _|| _|
|_______|| __|_____||||________||| |____|
|__| W I R E L E S S F R E E D O M
CHAOS CALMER (Bleeding Edge, unknown)
1 1/2 oz Gin Shake with a glassful
1/4 oz Triple Sec of broken ice and pour
3/4 oz Lime Juice unstrained into a goblet.
1 1/2 oz Orange Juice
1 tsp. Grenadine Syrup
root#OpenWrt:~# wget https://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/m
t7620/openwrt-15.05.1-ramips-mt7620-ArcherC20i-squashfs-sysupgrade.bin
wget: not an http or ftp url: https://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7620/openwrt-15.05.1-ramips-mt7620-ArcherC20i-squashfs-sysupgrade.bin
root#OpenWrt:~#
Replace https in your link with http:
wget http://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7620/openwrt-15.05.1-ramips-mt7620-ArcherC20i-squashfs-sysupgrade.bin
Your installed version of wget doesn't support TLS (libopenssl is not installed).
Also, I would change to /tmp dir first, so that downloaded image is stored in RAM (you probably don't have enough space in flash):
cd /tmp
wget http://...
Related
I am diff'ing two .md5 files with diff -yb --suppress-common-lines --width=250
and getting
0b92397d4978b7b5ba1ae2d4be0ca639 1.__Ms._Eldoris_McCondichie_3-5-04-Apple_ProRes_422_for_Interlaced_material_copy | 66c0a190ccf79e6ca1e34b86bfe89788 1. Ms. Eldoris McCondichie 3:5:04.mov
66c0a190ccf79e6ca1e34b86bfe89788 1.__Ms._Eldoris_McCondichie_3-5-04.mov | 7519e0c6d5f8f56be15b5c6eb82f1678 10. Mr. Clyde Eddy.mov
9ca5150c4f399ad58aae1e4a4a97f809 10._Mr._Clyde_Eddy-Apple_ProRes_422_for_Interlaced_material_copy.mov | 1eedc2c35fdbbc033dbc7bea8b3e4c0d 11. Ms. Jewel Smitherman Rogers 1a w TC.mov
7519e0c6d5f8f56be15b5c6eb82f1678 10._Mr._Clyde_Eddy.mov | 535acdb76a8f56f50bad418c8ff18ec7 12. Ms. Jewel Smitherman Rogers 1b w TC.mov
11411fac492a50e7692669849281dd8a 11._Ms._Jewel_Smitherman_Rogers_1a_w_TC-Apple_ProRes_422_for_Interlaced_material | 2f5d941751409dfd407e8f181aa745c6 13. Ms. Jewel Smitherman Rogers 2 w TC.mov
1eedc2c35fdbbc033dbc7bea8b3e4c0d 11._Ms._Jewel_Smitherman_Rogers_1a_w_TC.mov | 4a0c342444fedb2096c8495fae5e1459 14. Ms. Thelma Knight w TC.mov
acf43bd1b507f1370238dd9d7855f177 12._Ms._Jewel_Smitherman_Rogers_1b_w_TC-Apple_ProRes_422_for_Interlaced_material | 56b0d7952f01b48f47d90a5c300411ef 15. Mr. Robert Holloway w TC.mov
535acdb76a8f56f50bad418c8ff18ec7 12._Ms._Jewel_Smitherman_Rogers_1b_w_TC.mov | 3117d375927b0032f7b804d1f272f97a 16. Mr. Archie Franklin w TC.mov
1e2c9a47ef1ae1869e35e1c439af054f 13._Ms._Jewel_Smitherman_Rogers_2_w_TC-Apple_ProRes_422_for_Interlaced_material_ | 552230c7e504e0f3fa819a46b8169bd4 17. Mr. John Hope Franklin by Charles Ogletree.mov
2f5d941751409dfd407e8f181aa745c6 13._Ms._Jewel_Smitherman_Rogers_2_w_TC.mov | 933b65571efefd2ea1e642f478f4cc94 18. Dr. Olivia Hooker - Congress 03:07.mov
86841f59d7660a99feb5d3ce65c827a0 14._Ms._Thelma_Knight_w_TC-Apple_ProRes_422_for_Interlaced_material_copy.mov | 5fdea1ec2667544cb59e0a4b5b377092 19. Mr. John Hope Franklin - Congress 03:07.mov
4a0c342444fedb2096c8495fae5e1459 14._Ms._Thelma_Knight_w_TC.mov | 83a52017b776abd0a0c82e3866ac08b5 2. Dr. Olivia Hooker 11:16:04.mov
d6853f5f8fda9f130073fb3e3dbf16e6 15._Mr._Robert_Holloway_w_TC-Apple_ProRes_422_for_Interlaced_material_copy.mov | 3611978acf5e564efe7567262b9960f8 20. Bill O'Brian - Historian.mov
56b0d7952f01b48f47d90a5c300411ef 15._Mr._Robert_Holloway_w_TC.mov | 09108415da82b24c114f3c135db611eb 21. John Rogers - Descendant.mov
eafa27fce895e52bc7b6071668e0c10f 16._Mr._Archie_Franklin_w_TC-Apple_ProRes_422_for_Interlaced_material_copy.mov | 1d74cad5bf3e0887d31c4df709b91957 22. Ms. Eddie Faye Gates - Historian 3:4:04.mov
3117d375927b0032f7b804d1f272f97a 16._Mr._Archie_Franklin_w_TC.mov | d6a5dbc85ed5b60b4fc678ba9ad9672d 23. Scott Elsworth - Historian.mov
3969d4eb70bf9595bb7a3bac283fda28 17._Mr.__John_Hope_Franklin_by_Charles_Ogletree-Apple_ProRes_422_for_Interlaced_ | 529a6ad514dca022836f43a780f8d1dd 24. Dr. Olivia Hooker MV 8:07.mov
552230c7e504e0f3fa819a46b8169bd4 17._Mr.__John_Hope_Franklin_by_Charles_Ogletree.mov | 1ca96afc9135bc73e2be7f6702469416 25. Mr. Otis Clark MV 8:07.mov
7947f017d3e0dc194dd3085c2474583f 18._Dr._Olivia_Hooker_-_Congress_03-07-Apple_ProRes_422_for_Interlaced_material_ | 2bf6c9f2cc68f7e8d54b89d9585d90d9 26. Mr. Wes Young MV 8:07.mov
933b65571efefd2ea1e642f478f4cc94 18._Dr._Olivia_Hooker_-_Congress_03-07.mov | b609627fef5619d4d735f46352d0effb 27. Survivors Supreme Court 3:9:05.mov
eb837afbd180e1c9217b5cb02ca69849 19._Mr._John_Hope_Franklin_-_Congress_03-07-Apple_ProRes_422_for_Interlaced_mate | 91c74d7902d1bd4895e77c64fd163d7d 3. Ms. Jimmie Lily Franklin 7:8:04.mov
5fdea1ec2667544cb59e0a4b5b377092 19._Mr._John_Hope_Franklin_-_Congress_03-07.mov | ac6c3ac0437a93425f1b6be05c9a4914 4. Mr. Otis Clark 3:5:04.mov
1968980fe9a3d19650fa7c3ec5507a2e 2.__Dr._Olivia_Hooker_11-16-04-Apple_ProRes_422_for_Interlaced_material_copy.mov | 978f5771c0c6a821124387ce029983c8 5. Ms. Juanita Arnold 03:04.mov
83a52017b776abd0a0c82e3866ac08b5 2.__Dr._Olivia_Hooker_11-16-04.mov | b9fc1244ffbd733f4de4e014e5bef209 6. Ms. Eulis Jackson 03:04.mov
ada33ffb5e5e2083856f52b5709f1b31 20._Bill_O_Brian_-_Historian-Apple_ProRes_422_for_Interlaced_material_copy.mov | f7e5822a03f8bad047b701fd5c2c6704 7. Mr. Wes Young 3:25:04.mov
3611978acf5e564efe7567262b9960f8 20._Bill_O_Brian_-_Historian.mov | 1fc6342a34e1efc6b6c99225543a2900 8. Mr. J.B. Bates 3:5:04.mov
94e6f75688705b0e0a1b73e61cb367d7 21._John_Rogers_-_Descendant-Apple_ProRes_422_for_Interlaced_material_copy.mov | b760f9ef2c13fbdf17c56001860176b6 9. Ms. Beatrice Campbell Webster.mov
09108415da82b24c114f3c135db611eb 21._John_Rogers_-_Descendant.mov <
9345c8828f917026d88592d095190556 22._Ms._Eddie_Faye_Gates_-_Historian_3-4-04-Apple_ProRes_422_for_Interlaced_mate <
1d74cad5bf3e0887d31c4df709b91957 22._Ms._Eddie_Faye_Gates_-_Historian_3-4-04.mov <
65772091bcc8ebc75cca81a2fa29ecf4 23._Scott_Elsworth_-_Historian-Apple_ProRes_422_for_Interlaced_material_copy.mov <
d6a5dbc85ed5b60b4fc678ba9ad9672d 23._Scott_Elsworth_-_Historian.mov <
dd53a3132b03327ccf1660905aca1884 24._Dr._Olivia_Hooker_MV_8-07-Apple_ProRes_422_for_Interlaced_material_copy.mov <
529a6ad514dca022836f43a780f8d1dd 24._Dr._Olivia_Hooker_MV_8-07.mov <
f75eb9a79e4e4fccf53d0463a1c7d520 25._Mr._Otis_Clark_MV_8-07-Apple_ProRes_422_for_Interlaced_material_copy.mov <
1ca96afc9135bc73e2be7f6702469416 25._Mr._Otis_Clark_MV_8-07.mov <
f992aa8cf233d306fc7cea0a32d1d1a6 26._Mr._Wes_Young__MV_8-07-Apple_ProRes_422_for_Interlaced_material_copy.mov <
2bf6c9f2cc68f7e8d54b89d9585d90d9 26._Mr._Wes_Young__MV_8-07.mov <
10f38ecde7590255e88529e9ba41cd06 27._Survivors_Supreme_Court_3-9-05-Apple_ProRes_422_for_Interlaced_material_copy <
b609627fef5619d4d735f46352d0effb 27._Survivors_Supreme_Court_3-9-05.mov <
6d566d7dbbf79652a6545e89c8a0e5a6 3.__Ms._Jimmie_Lily_Franklin_7-8-04-Apple_ProRes_422_for_Interlaced_material_cop <
91c74d7902d1bd4895e77c64fd163d7d 3.__Ms._Jimmie_Lily_Franklin_7-8-04.mov <
What is the | symbol telling me? I can't find that anywhere in the diff documentation. Some of the lines match on checksums, yes, but the filenames are slightly different. For other lines, both the checksums and filenames only exist in the first file, not the second, yet in both instances the | is used.
Further down I get the < symbol, which I understand.
I don't get it.
I am trying to run a hive query using gcloud compute ssh via scala
First, here is what i tried
scala> import sys.process._
scala> val results = Seq("hive", "-e", "show databases;").!!
asd
zxc
qwe
scala>
which is good. Now, i want to run the same hive command, but against a GCP cluster. I have gcloud setup on my VM and from the command line, i can easily do
$ gcloud compute ssh --zone myZone myNode --internal-ip -- 'hive -e "show databases;"'
Updating project ssh metadata...⠶Updated [https://www.googleapis.com/compute/v1/projects/myProject].
Updating project ssh metadata...done.
Waiting for SSH key to propagate.
Warning: Permanently added 'compute.2746937995265952194' (RSA) to the list of known hosts.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 19 100 19 0 0 2982 0 --:--:-- --:--:-- --:--:-- 3166
Logging initialized using configuration in file:/etc/hive/conf.dist/hive-log4j2.properties Async: true
OK
asd
zxc
qwe
Now, I want to run the above using scala. Here is what i tried
scala> val results = Seq("gcloud", "compute", "ssh", "--zone", "myZone", "myNode", "--internal-ip", "--", "hive", "-e" ,"show databases").!!
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 19 100 19 0 0 3270 0 --:--:-- --:--:-- --:--:-- 3800
Pseudo-terminal will not be allocated because stdin is not a terminal.
Logging initialized using configuration in file:/etc/hive/conf.dist/hive-log4j2.properties Async: true
NoViableAltException(-1#[846:1: ddlStatement : ( createDatabaseStatement | switchDatabaseStatement | dropDatabaseStatement | createTableStatement | dropTableStatement | truncateTableStatement | alterStatement | descStatement | showStatement | metastoreCheck | createViewStatement | createMaterializedViewStatement | dropViewStatement | dropMaterializedViewStatement | createFunctionStatement | createMacroStatement | createIndexStatement | dropIndexStatement | dropFunctionStatement | reloadFunctionStatement | dropMacroStatement | analyzeStatement | lockStatement | unlockStatement | lockDatabase | unlockDatabase | createRoleStatement | dropRoleStatement | ( grantPrivileges )=> grantPrivileges | ( revokePrivileges )=> revokePrivileges | showGrants | showRoleGrants | showRolePrincipals | showRoles | grantRole | revokeRole | setRole | showCurrentRole | abortTransactionStatement );])
at org.antlr.runtime.DFA.noViableAlt(DFA.java:158)
at org.antlr.runtime.DFA.predict(DFA.java:144)
at org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:3757)
at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:2382)
at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1333)
at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:208)
at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:77)
at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:70)
at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:468)
at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1317)
at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1457)
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1237)
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1227)
at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:233)
at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:184)
at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:403)
at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:336)
at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:787)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:759)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:686)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:244)
at org.apache.hadoop.util.RunJar.main(RunJar.java:158)
FAILED: ParseException line 1:4 cannot recognize input near 'show' '<EOF>' '<EOF>' in ddl statement
java.lang.RuntimeException: Nonzero exit value: 64
at scala.sys.package$.error(package.scala:27)
at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.slurp(ProcessBuilderImpl.scala:132)
at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.$bang$bang(ProcessBuilderImpl.scala:102)
... 50 elided
scala>
why am i getting this error ? I also tried
scala> val results = Seq("gcloud", "compute", "ssh", "--zone", "myZone", "myNode", "--internal-ip", "--", "hive", "-e" ,"show databases;").!!
but got the same error. Then i tried
scala> val results = Seq("gcloud", "compute", "ssh", "--zone", "myZone", "myNode", "--internal-ip", "--", "'hive -e \"show databases;\"'").!!
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 19 100 19 0 0 3245 0 --:--:-- --:--:-- --:--:-- 3800
Pseudo-terminal will not be allocated because stdin is not a terminal.
bash: hive -e "show databases;": command not found
java.lang.RuntimeException: Nonzero exit value: 127
at scala.sys.package$.error(package.scala:27)
at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.slurp(ProcessBuilderImpl.scala:132)
at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.$bang$bang(ProcessBuilderImpl.scala:102)
... 50 elided
How can I run the gcloud comput ssh properly using scala ?
You don't need the single quotes in your last example. You're trying to pass the string:
hive -e "show databases;"
For fun, I would use triple quotes in Scala:
"""hive -e "show databases;""""
to avoid backslash. Single quotes in your good command line are processed by bash.
This is what worked in bash:
$ gcloud compute ssh --zone myZone myNode --internal-ip -- 'hive -e "show databases;"'
scala.sys.process got some basic parsing at some point. There is a space in this file name that must be quoted. Amazingly, it seems to do shell-style quotes:
$ scala
Welcome to Scala 2.13.0 (OpenJDK 64-Bit Server VM, Java 11.0.3).
Type in expressions for evaluation. Or try :help.
scala> import scala.sys.process._
import scala.sys.process._
scala> "ls -l /tmp/skypeforlinux Crashes".!!
ls: cannot access '/tmp/skypeforlinux': No such file or directory
ls: cannot access 'Crashes': No such file or directory
java.lang.RuntimeException: Nonzero exit value: 2
at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.slurp(ProcessBuilderImpl.scala:155)
at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.$bang$bang(ProcessBuilderImpl.scala:112)
... 28 elided
scala> """ls -l "/tmp/skypeforlinux Crashes"""".!!
res1: String =
"total 0
"
scala> """ls -l '/tmp/skypeforlinux Crashes'""".!!
res2: String =
"total 0
"
scala> """ls -l /tmp/skypeforlin'ux Cr'ashes""".!!
res3: String =
"total 0
"
scala> """echo 'hive -e "show databases;"'""".!!
res4: String =
"hive -e "show databases;"
"
The double quotes around "my house" are part of the file name:
scala> """ls '/tmp/"my house"'""".!!
res5: String =
"/tmp/"my house"
"
I guess that code is where I learned how shell-style quotes work, though I never have a chance to use that knowledge. Except for this answer, so thanks for the opportunity.
I would like to replace file contains special pattern with sed or similar solutions. I can replace file with individual sed but number can be anything and need to preserve prefix as it is.
Actual file:
1) L0 | Delete multiple contacts | C543072
2) L1 | Move Multiple Messages via Header toolbar Move button | C1832588
3) L1 | Move Multiple Messages contains file attachment | C2058412
- L1 | Forward message containing attachment | C1976614
- L0 | Normal message contains file attachment | PREAPPS-1488
- L3 | Forward as signed in message view | C1990347
Expected file:
FAILED - L0 | Delete multiple contacts | C543072
FAILED - L1 | Move Multiple Messages via Header toolbar Move button | C1832588
FAILED - L1 | Move Multiple Messages contains file attachment | C2058412
SKIPPED - L1 | Forward message containing attachment | C1976614
SKIPPED - L0 | Normal message contains file attachment | PREAPPS-1488
SKIPPED - L3 | Forward as signed in message view | C1990347
Tried code:
sed -i 's/- L/SKIPPED - L/' /report.txt
sed -i 's/1) L0/FAILED - L0/' /report.txt
sed -i 's/[0-9]) L/FAILED - L[0-9]/' /report.txt (doesn't preserve LX)
Is there any single command using regex to replace content along with preserving LX where string starts with number) L[number]?
Multiple commands in a sed script can be separated by semicolons (;).
$ sed 's/^[0-9]\+)/FAILED -/; s/^-/SKIPPED -/' file
FAILED - L0 | Delete multiple contacts | C543072
FAILED - L1 | Move Multiple Messages via Header toolbar Move button | C1832588
FAILED - L1 | Move Multiple Messages contains file attachment | C2058412
SKIPPED - L1 | Forward message containing attachment | C1976614
SKIPPED - L0 | Normal message contains file attachment | PREAPPS-1488
SKIPPED - L3 | Forward as signed in message view | C1990347
^ matches beginning of the input line,
[0-9]\+ matches one or more digits.
So i have simple shell commands to ping websites to retrieve data about said websites.
For example one of my pinging.sh looks like this:
ping -R -c 120 blar.org.cn >> pingdata.txt
ping -R -c 120 another.net >> pingdata.txt
But then my crontabs look like this:
7 * * * ./pinging.sh >> pingdata.log
The pingdata.log doesn't output. Is it best to do it through the crontab or through the script? I assumed the crontab would be better because it would cover the entire script rather than having to write it out multiple times.
You need to indicate the full path of your script in the cronjob, together with the binary running it.
For example:
7 * * * * /bin/sh /home/you/pinging.sh >> /home/you/pingdata.log
Note also you are just adding 4 parameters to the cronjob, whereas you need at least 5:
+---------------- minute (0 - 59)
| +------------- hour (0 - 23)
| | +---------- day of month (1 - 31)
| | | +------- month (1 - 12)
| | | | +---- day of week (0 - 6) (Sunday=0 or 7)
| | | | |
* * * * * command to be executed
You can test your cron syntax with Crontab guru (---> http://crontab.guru/).
First, the executable must be provided as full path in cron.
Example:
7 * * * * /bin/bash /path/to/pinging.sh
Second, create a wrapper script for pinging.sh >> pingdata.log and add that to crontab.
Third, your crontab entry is wrong. There must be 5 fields whereas your's have 4 (maybe that's a typo ?)
I'm trying to print the outcome of an anova like so:
library(pander)
m.aov = aov(Sepal.Width ~ Species * Sepal.Length, iris)
pander(m.aov, split.table=Inf)
and I get this as expected if I type it into the console:
----------------------------------------------------------------------
Df Sum Sq Mean Sq F value Pr(>F)
-------------------------- ---- -------- --------- --------- ---------
**Species** 2 11.34 5.672 76.48 2.329e-23
**Sepal.Length** 1 4.769 4.769 64.3 3.368e-13
**Species:Sepal.Length** 2 1.513 0.7566 10.2 7.19e-05
**Residuals** 144 10.68 0.07417 NA NA
----------------------------------------------------------------------
Table: Analysis of Variance Model
However, if I embed this into a knitr chunk, I don't get the table:
```{r, results='asis'}
library(pander)
m.aov = aov(Sepal.Width ~ Species * Sepal.Length, iris)
pander(m.aov, split.table=Inf)
```
Knit the above and one obtains
```r
pander(m.aov, split.table=Inf)
```
i.e., the code chunk with no output.
Question: Is this a bug (in knitr? pander?) or something I've overlooked? How can I work around it?
> sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_AU.UTF-8 LC_NUMERIC=C LC_TIME=en_AU.UTF-8
[4] LC_COLLATE=en_AU.UTF-8 LC_MONETARY=en_AU.UTF-8 LC_MESSAGES=en_AU.UTF-8
[7] LC_PAPER=en_AU.UTF-8 LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=en_AU.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] knitr_1.8 pander_0.5.1 vimcom_1.0-0 setwidth_1.0-3 colorout_1.0-3
loaded via a namespace (and not attached):
[1] digest_0.6.4 evaluate_0.5.5 formatR_1.0 Rcpp_0.11.2 stringr_0.6.2 tools_3.0.2