The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
seekr is an R package designed to help you search for specific patterns within text files.
# Install it directly from CRAN:
install.packages("seekr")
# Or the the development version from GitHub:
# install.packages("pak")
::pak("smartiing/seekr") pak
seekr provides two main functions:
seek()
: Search for a pattern in files within a
specified directory.seek_in()
: Search for a pattern in a given list of
files.Each function returns a tibble with the following columns:
path
: Path to the file (relative or absolute).line_number
: Line number where the pattern was
found.match
: The first match found in the line.matches
: All matches found in the line (if matches =
TRUE).line
: Content of the matching line.library(seekr)
#>
#> Attaching package: 'seekr'
#> The following object is masked from 'package:base':
#>
#> seek
= system.file("extdata", package = "seekr")
path
# Search all function definitions in R files
seek("[^\\s]+(?= (=|<-) function\\()", path, filter = "\\.R$")
#> # A tibble: 6 × 4
#> path line_number match line
#> <fs::path> <int> <chr> <chr>
#> 1 /script1.R 1 add_one add_one <- function(x) {
#> 2 /script1.R 5 capitalize capitalize <- function(txt) {
#> 3 /script1.R 9 say_hello say_hello <- function(name) {
#> 4 /script2.R 2 mean_safe mean_safe <- function(x) {
#> 5 /script2.R 7 sd_safe sd_safe <- function(x) {
#> 6 /script2.R 12 print_vector print_vector <- function(v) {
# Search for usage of "TODO" comments in source code in a case insensitive way
seek("(?i)TODO", path, filter = "\\.R$")
#> # A tibble: 1 × 4
#> path line_number match line
#> <fs::path> <int> <chr> <chr>
#> 1 /script2.R 1 TODO # TODO: optimize this function
# Search for error/warning in log files
seek("(?i)error", path, filter = "\\.log$")
#> # A tibble: 14 × 4
#> path line_number match line
#> <fs::path> <int> <chr> <chr>
#> 1 /server.log 3 ERROR 2025-04-29 21:52:17 ERROR : Starting process
#> 2 /server.log 6 ERROR 2025-04-30 04:15:43 ERROR : Retrying request
#> 3 /server.log 7 ERROR 2025-04-29 13:59:14 ERROR : Failed to authenti…
#> 4 /server.log 10 ERROR 2025-04-30 17:20:48 ERROR : User login failed
#> 5 /server.log 11 ERROR 2025-04-30 11:41:17 ERROR : Starting process
#> 6 /server.log 14 ERROR 2025-04-30 00:15:59 ERROR : Connection success…
#> 7 /server.log 16 ERROR 2025-04-29 20:39:24 ERROR : User login failed
#> 8 /server.log 19 ERROR 2025-04-29 17:51:14 ERROR : Timeout reached
#> 9 /server.log 20 ERROR 2025-04-29 18:27:07 ERROR : Retrying request
#> 10 /server.log 21 ERROR 2025-04-30 16:15:44 ERROR : Disk usage high
#> 11 /server.log 23 ERROR 2025-04-30 17:14:15 ERROR : User login failed
#> 12 /server.log 30 ERROR 2025-04-30 00:03:39 ERROR : Connection success…
#> 13 /server.log 35 ERROR 2025-04-30 17:25:05 ERROR : Connection success…
#> 14 /server.log 40 ERROR 2025-04-29 17:49:55 ERROR : Restart scheduled
# Search for config keys in YAML
seek("database:", path, filter = "\\.ya?ml$")
#> # A tibble: 1 × 4
#> path line_number match line
#> <fs::path> <int> <chr> <chr>
#> 1 /config.yaml 1 database: database:
# Looking for "length" in all types of text files
seek("(?i)length", path)
#> # A tibble: 4 × 4
#> path line_number match line
#> <fs::path> <int> <chr> <chr>
#> 1 /iris.csv 1 Length "\"Sepal.Length\",\"Sepal.Width\",\"Petal.Lengt…
#> 2 /script2.R 3 length " if (length(x) == 0) return(NA)"
#> 3 /script2.R 8 length " if (length(x) <= 1) return(NA)"
#> 4 /script2.R 13 length " print(paste('Vector of length', length(v)))"
# Search for specific CSV headers using seek_in() and reading only the first line
<- list.files(path, "\\.csv$", full.names = TRUE)
csv_files seek_in(csv_files, "(?i)specie", n_max = 1)
#> # A tibble: 1 × 4
#> path line_number match line
#> <fs::path> <int> <chr> <chr>
#> 1 …YzN7t/temp_libpath4cf462766a0b/seekr/extdata/iris.csv 1 Spec… "\"S…
This package is licensed under the MIT License.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.