linux最快的文本搜索神器ripgrep(grep的最好代替者)

前言

说到文本搜索工具,大家一定会知道 grep, 它是 linux 最有用并最常用的工具之一。
但如果要再一个大的工程项目中搜索某个关键词,大家也一定知道它比较耗时。
所以就有了很多替代工具,之前最出名的是 Ack,Ag
而最近又有了新的替代者 Ripgrep, 这个工具和 Ack/Ag 一样都使用了多线程的方法,但 rg 比它们更快

简介

ripgrep 是一个以行为单位的搜索工具, 它根据提供的 pattern 递归地在指定的目录里搜索。它是由 Rust 语言写成,相较与同类工具,它的特点就是无与伦比地快。
几个特点如下:

  • 自动递归搜索 (grep 需要-R)
  • 自动忽略.gitignore 中的文件以及 2 进制文件
  • 可以搜索指定文件类型(rg -tpy foo限定 python 文件, rg -Tjs foo排除 js 文件)
  • 支持大部分 grep 的 feature(常用的都有)
  • 支持各种文件编译(UTF-8, UTF-16, latin-1, GBK, EUC-JP, Shift_JIS 等等)
  • 支持搜索常见压缩文件(gzip, xz, lzma, bzip2, lz4)
  • 自动高亮匹配的结果
  • 更少的命令名称 rg (grep 是四个字符)
  • 不支持多行搜索和花哨的正则

安装 ripgrep

先安装 RUST

curl https://sh.rustup.rs -sSf | sh

然后一路 enter 就好了

用 RUST 安装 rigpre

git clone https://github.com/BurntSushi/ripgrep
cd ripgrep
cargo build --release
cp ./target/release/rg /usr/local/bin/

最后一步根据你的情况把它放到某个在 PATH 里的路径里

使用

搜索结果展示

用法总体格式

USAGE:
  rg [OPTIONS] PATTERN [PATH ...]
  rg [OPTIONS] [-e PATTERN ...] [-f PATTERNFILE ...] [PATH ...]
  rg [OPTIONS] --files [PATH ...]
  rg [OPTIONS] --type-list
  command | rg [OPTIONS] PATTERN

输入参数

ARGS:
  <PATTERN>
      A regular expression used for searching. To match a pattern beginning with a
      dash, use the -e/--regexp flag.

      For example, to search for the literal '-foo', you can use this flag:

        rg -e -foo

      You can also use the special '--' delimiter to indicate that no more flags
      will be provided. Namely, the following is equivalent to the above:

        rg -- -foo

  <PATH>...
      A file or directory to search. Directories are searched recursively. Paths specified on
      the command line override glob and ignore rules.
options Description other
-A, --after-context <NUM> 显示匹配内容后的<NUM>行 会覆盖--context
-B, --before-context <NUM> 显示匹配内容前的<NUM>行 会覆盖--context
-b, --byte-offset 显示匹配内容在文件中的字节偏移 和-o 一起使用,只打印偏移
-s, --case-sensitive 大小写敏感 会覆盖-i(ignore case), -S(smart case)
--color <WHEN> 什么时候使用颜色,默认 auto 如果--vimgre 被使用,那么默认值是 never
可选项有: never, auto, always, ansi
--colors <COLOR_SPEC>... 设定输出颜色: color: red, blue, green, cyan
{type}:{attribute}:{value} magenta, yellow, white, black
{type}: path, line, column, match style: nobold, bold, nointense
{attribute}: fg, bg, style intense, nounderline, underline
{value}: a color or a text style Example:
{type}:none会清空{type}的颜色设定 rg --colors 'match:fg:magenta' --colors 'line:bg:yellow' foo
扩展颜色集可以被{value}使用,如果终端支持 ANSI color
描述方法是'x'(256-color) 或 'x,x,x'(24-bit true color)
x 是 0-255 之间的数值,默认是 10 进制, 0x 前缀是 16 进制
比如: rg --colors 'match:bg:0,128,255'
或者等价的:rg --colors 'match:bg:0x0,0x80,0xFF'
在使用 extended color code 时 intense 和 nointense 是无效的
--column 第一次匹配所在列数(从 1 开始) 能够被--no-column 取消掉
-C, --context <NUM> 显示匹配内容的前面和后面的<NUM>行 它会覆盖-B 和-A 选项
--context-separator <SEPARATOR> 在输出中用来分隔非连续的行 x7F 或t 可被使用,默认是--
-c, --count 只显示匹配的行数 如果只有一个文件给 ripgrep,那只打印匹配行数
可以用--with-filename 来强制打印文件名
它会覆盖--count-matches 选项
--count-matches 只显示匹配的次数 可以用--with-file 来强制在只有一个文件时也输出文件名
--debug 显示调试信息
--dfa-size-limit <NUM+SUFFIX?> regex DFA 的上限, 默认 10M
-E, --encoding <ENCODING> 描述文本编码, 默认是 auto https://encoding.spec.whatwg.org/#concept-encoding-get
-f, --file <PATTERNFILE>... 从文件中读入 pattern, 一行一 pattern 可以被多次使用或和-e 一起组合使用,所以有组合会被匹配
--files 打印所有将被搜索的文件 rg <options> --files [PATH...]方式使用,不能加 pattern
-l, --files-with-matches 只打印有匹配的文件名 覆盖--files-without-match
--files-without-match 只打印无匹配的文件名 覆盖 --file-with-matches
-F, --fixed-strings 把 pattern 当成常规文字而非 regex 可以用--no-fixed-strings 来禁止这个选项
-L, --follow 会递归搜索链接,默认关闭 可以用--no-follow 来关闭
-g, --glob <GLOB>... 通配符文件或文件夹,可以用!来取反 可以多次使用, 会匹配.gitignore 的通配符规则
-h, --help 打印帮助信息
--heading 打印文件名到匹配内容的上方而不是同一行 这是默认行为,可以用--no-heading 来关闭
--hidden 搜索隐藏文件和文件夹 默认忽略, 可用--no-hidden 关闭
--iglob <GLOB>... 同--glob, 但这个大小写不敏感
-i, --ignore-case pattern 大小写不敏感 可通过-s/--case-sensitive 或-S/--smart-case 覆盖这个选项
--ignore-file <PATH>... 忽略路径,格式同.gitignore, 可多个 多个--ignore-file 标记时,后面优先级高
在命令上时,使用-g 来达到同样效果
-v, --invert-match 反向匹配
-n, --line-number 显示文件行数,默认打开
-x, --line-regexp 只显示整行都匹配 pattern 的行 会覆盖--word-regexp
-M, --max-columns <NUM> 不打印长于<NUM>列的匹配行
-m, --max-count <NUM> 限制一个文件最多<NUM>行匹配
--max-depth <NUM> 限制文件夹递归搜索深度 rg --max-depth 0 dir/不执行任何搜索
--max-filesize <NUM+SUFFIX?> 忽略大于<NUM>byte 的文件 suffix 可以是 K, M,G, 默认是 byte
--mmap 尽量使用 memory maps, 默认行为 目前它不支持所有选项, 用--no-mmap 来关闭
--no-config 不读取 conf 文件, 忽略 RIPGREP_CONFIG_PATH
--no-filename 不要打印匹配文件名
--no-heading 在每个匹配行前都打印文件名
--no-ignore 取消 ignore 文件,如.gitignore, .ignore 可以用--ignore 关闭
--no-ignore-global 取消对全局的 ignore 文件读取 如$HOME/.config/git/ignore
--no-ignore-messages 取消解析.ignroe, .gitignore 文件相关错误 可通过--ignore-messages 关闭
--no-ignore-parent 不读取父文件夹里的.gitignore, .ignore 文件 可通过 --ignore-parent 关闭
--no-ignore-vcs 只全能.ignore 文件 可通过--ignore-vcs 关闭
-N, --no-line-number 不打印匹配行数
--no-messages 不打印打开和读取文件相关错误
-0, --null 在打印的文件路径后加一个 NUL 字符 对于 xargs 非常有用
-o, --only-matching 只打印匹配的内容,而不是整行
--passthru 打印匹配和不匹配的行
--path-separator <SEPARATOR> 路径分隔符,在 linux 上默认是/
--pre <COMMAND> 用<COMMAND>处理文件,并将结果给 rg 可能有巨大的性能惩罚
例如
case "$1" in
*.pdf)
exec pdftotext "$1" -
;;
*)
case $(file "$1") in
_Zstandard_)
exec pzstd -cdq
;;
*)
exec cat
;;
esac
;;
esac
-p, --pretty --color always --heading --line-number
-q, --quiet 不打印到 stdout, 如果匹配发现,停止 rg 当 rg 用于 exit 代码时非常有用
--regex-size-limit <NUM+SUFFIX?> 编译 regex 的上限
-e, --regexp <PATTERN>... 使用正则来匹配 可多次使用这个选项,打印匹配任何 pattern 的行
可以用于搜索-开头的 pattern,如rg -e -foo
-r, --replace <REPLACEMENT_TEXT> 用相应文件代替匹配内容打印出来 组序号($5)可以被使用
-z, --search-zip 在 gz,bz2,xz,lzma,lz4 文件类型中搜索 可通过--no-search-zip 关闭
-S, --smart-case 如果全小写,则大小写不敏感,否则敏感 可通过-s/--case-sensitive 和-i/--ignore-case 关闭
--sort-files 根据文件路径排序输出结果 会关闭并行搜索线程
--stats 打印出统计结果
-a, --text 搜索二进制文件 可通过--no-text 关闭
-j, --threads <NUM> 大约使用的线程数
-t, --type <TYPE>... 只搜索某种文件类型 可通过--type-lsit 来列出支持的文件类型
--type-add <TYPE_SPEC>... 添加文件类型 rg --type-add 'foo:*.foo' -tfoo PATTERN
也可以用来创建某种包含多种文件类型的规则 --type-add 'src:include:cpp,py,md'
--type-clear <TYPE>... 清除默认的文件类型
--type-list 列出所有内置文件类型
-T, --type-not <TYPE>... 不要搜索某种文件类型
-u, --unrestricted -u 搜索.gitignore 里的文件, -uu 搜索隐藏文件 -uuu 搜索二进制文件
-V, --version 打印版本信息
--vimgrep 每一次匹配打印一行 一行有多次匹配会打印多行
-H, --with-filename 打印匹配的文件路径,默认 可通过--no-filename 关闭
-w, --word-regexp 把 pattern 作为单独单词匹配,与< >等价

实例展示

实例一

$ rg 'name' ./

实例二

搜索name为独立单词的内容(-w), 相当于<pattern>

$ rg -w 'name' ./

实例三

只打印包含匹配内容的文件名(-l)

$ rg -w 'name' ./ -l
src/cpp/epoll_server.cpp
src/cpp/uart_xtor.cpp

实例四

只搜索cpp文件(-t), 可以用-T来不搜索某种类型文件

$ rg -w 'name' ./ -tcpp

实例五

正则搜索(-e)

$ rg -e "sa.*port" ./ -tcpp

实例六

显示匹配内容及上下各两行(-C), -A/-B类似

$ rg -e "sa.*port" ./ -tcpp -C2

实例七

显示不含"debug"的行(-v)

$ rg -v "debug" -tcpp ./

实例八

只显示匹配部分(-o)

$ rg -e "if.*debug" ./ -tcpp -o

实例九

忽略大小写(-i)

$ rg -ie "if.*debug" ./ -tcpp -o

实例十

把pattern当成常量字符(-F), 像.(){}*+不需要escape,如果要搜索的字符是以-开头,那么要用--来作为分隔符,或者用rg -e "-foo"

rg -F "i++)" ./ -tcpp

实例十一

打印所有将被搜索的文件 --files

rg --files

实例十二

输出内置识别文件类型

$ rg --type-list
agda: *.agda, *.lagda
aidl: *.aidl
amake: *.bp, *.mk
asciidoc: *.adoc, *.asc, *.asciidoc
asm: *.S, *.asm, *.s
ats: *.ats, *.dats, *.hats, *.sats
avro: *.avdl, *.avpr, *.avsc
awk: *.awk
bazel: *.bzl, BUILD, WORKSPACE
bitbake: *.bb, *.bbappend, *.bbclass, *.conf, *.inc
bzip2: *.bz2
c: *.H, *.c, *.cats, *.h
cabal: *.cabal
cbor: *.cbor
ceylon: *.ceylon
clojure: *.clj, *.cljc, *.cljs, *.cljx
cmake: *.cmake, CMakeLists.txt
coffeescript: *.coffee
config: *.cfg, *.conf, *.config, *.ini
cpp: *.C, *.H, *.cc, *.cpp, *.cxx, *.h, *.hh, *.hpp, *.hxx, *.inl
creole: *.creole
crystal: *.cr, Projectfile
cs: *.cs
csharp: *.cs
cshtml: *.cshtml
css: *.css, *.scss
csv: *.csv
cython: *.pyx
d: *.d
dart: *.dart
dhall: *.dhall
docker: *Dockerfile*
elisp: *.el
elixir: *.eex, *.ex, *.exs
elm: *.elm
erlang: *.erl, *.hrl
fidl: *.fidl
fish: *.fish
fortran: *.F, *.F77, *.F90, *.F95, *.f, *.f77, *.f90, *.f95, *.pfo
fsharp: *.fs, *.fsi, *.fsx
gn: *.gn, *.gni
go: *.go
groovy: *.gradle, *.groovy
gzip: *.gz
h: *.h, *.hpp
haskell: *.c2hs, *.cpphs, *.hs, *.hsc, *.lhs
hbs: *.hbs
hs: *.hs, *.lhs
html: *.ejs, *.htm, *.html
idris: *.idr, *.lidr
java: *.java, *.jsp
jinja: *.j2, *.jinja, *.jinja2
jl: *.jl
js: *.js, *.jsx, *.vue
json: *.json, composer.lock
jsonl: *.jsonl
julia: *.jl
jupyter: *.ipynb, *.jpynb
kotlin: *.kt, *.kts
less: *.less
license: *[.-]LICEN[CS]E*, AGPL-*[0-9]*, APACHE-*[0-9]*, BSD-*[0-9]*, CC-BY-*, COPYING, COPYING[.-]*, COPYRIGHT, COPYRIGHT[.-]*, EULA, EULA[.-]*, GFDL-*[0-9]*, GNU-*[0-9]*, GPL-*[0-9]*, LGPL-*[0-9]*, LICEN[CS]E, LICEN[CS]E[.-]*, MIT-*[0-9]*, MPL-*[0-9]*, NOTICE, NOTICE[.-]*, OFL-*[0-9]*, PATENTS, PATENTS[.-]*, UNLICEN[CS]E, UNLICEN[CS]E[.-]*, agpl[.-]*, gpl[.-]*, lgpl[.-]*, licen[cs]e, licen[cs]e.*
lisp: *.el, *.jl, *.lisp, *.lsp, *.sc, *.scm
log: *.log
lua: *.lua
lz4: *.lz4
lzma: *.lzma
m4: *.ac, *.m4
make: *.mak, *.mk, GNUmakefile, Gnumakefile, Makefile, gnumakefile, makefile
man: *.[0-9][cEFMmpSx], *.[0-9lnpx]
markdown: *.markdown, *.md, *.mdown, *.mkdn
matlab: *.m
md: *.markdown, *.md, *.mdown, *.mkdn
mk: mkfile
ml: *.ml
msbuild: *.csproj, *.fsproj, *.proj, *.props, *.targets, *.vcxproj
nim: *.nim
nix: *.nix
objc: *.h, *.m
objcpp: *.h, *.mm
ocaml: *.ml, *.mli, *.mll, *.mly
org: *.org
pdf: *.pdf
perl: *.PL, *.perl, *.pl, *.plh, *.plx, *.pm, *.t
php: *.php, *.php3, *.php4, *.php5, *.phtml
pod: *.pod
protobuf: *.proto
ps: *.cdxml, *.ps1, *.ps1xml, *.psd1, *.psm1
puppet: *.erb, *.pp, *.rb
purs: *.purs
py: *.py
qmake: *.prf, *.pri, *.pro
r: *.R, *.Rmd, *.Rnw, *.r
rdoc: *.rdoc
readme: *README, README*
rst: *.rst
ruby: *.gemspec, *.rb, .irbrc, Gemfile, Rakefile
rust: *.rs
sass: *.sass, *.scss
scala: *.sbt, *.scala
sh: *.bash, *.bashrc, *.csh, *.cshrc, *.ksh, *.kshrc, *.sh, *.tcsh, *.zsh, .bash_login, .bash_logout, .bash_profile, .bashrc, .cshrc, .kshrc, .login, .logout, .profile, .tcshrc, .zlogin, .zlogout, .zprofile, .zshenv, .zshrc, bash_login, bash_logout, bash_profile, bashrc, profile, zlogin, zlogout, zprofile, zshenv, zshrc
smarty: *.tpl
sml: *.sig, *.sml
soy: *.soy
spark: *.spark
sql: *.psql, *.sql
stylus: *.styl
sv: *.h, *.sv, *.svh, *.v, *.vg
svg: *.svg
swift: *.swift
swig: *.def, *.i
systemd: *.automount, *.conf, *.device, *.link, *.mount, *.path, *.scope, *.service, *.slice, *.socket, *.swap, *.target, *.timer
taskpaper: *.taskpaper
tcl: *.tcl
tex: *.bib, *.cls, *.ltx, *.sty, *.tex
textile: *.textile
tf: *.tf
toml: *.toml, Cargo.lock
ts: *.ts, *.tsx
twig: *.twig
txt: *.txt
vala: *.vala
vb: *.vb
verilog: *.sv, *.svh, *.v, *.vh
vhdl: *.vhd, *.vhdl
vim: *.vim
vimscript: *.vim
webidl: *.idl, *.webidl, *.widl
wiki: *.mediawiki, *.wiki
xml: *.xml, *.xml.dist
xz: *.xz
yacc: *.y
yaml: *.yaml, *.yml
zsh: *.zsh, .zlogin, .zlogout, .zprofile, .zshenv, .zshrc, zlogin, zlogout, zprofile, zshenv, zshrc

总结

ripgrep的搜索速度真是快的飞起来,在浏览代码时对我的帮助非常大。我相信它对于每一个码农的价值都是无限大的,特别是结合FZF之后。
唯一的弱点是对正则的支持,但这是一个取舍,如果采用如PCRE那样的库的话,一定会极大影响速度。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 使用Linux正则表达式灵活搜索文件中的文本

    正则表达式是一种符号表示法,用于识别文本模式.Linux处理正则表达式的主要程序是grep.grep搜索与正则表达式匹配的行,并将结果输送至标准输出. 1. grep匹配模式 grep按下述方式接受选项和参数(其中,regex表示正则表达式) 复制代码 代码如下: grep [options] regex [files] 其中options主要为下表: 选项 含义 功能描述 -i ignore case 忽略大小写 -v invert match 不匹配匹配的 -l file-with-matc

  • linux文件搜索及其它基础命令介绍(3)

    1.linux中包含大量的文件,对于文件查找,linux提供了find命令. find是一个非常有效的工具,它可以遍历目标目录甚至整个文件系统来查找某些文件或目录: find [path...] [expression] 其中expression包括三种:options.tests和actions.多个表达式之间被操作符分隔,当操作符被省略时,表示使用了默认操作符-and. 当表达式中不包含任何actions时,默认使用-print,也就是打印出搜索到的所有文件,用换行分隔. 其实可以将三种表达

  • Linux/Nginx如何查看搜索引擎蜘蛛爬虫的行为

    摘要 做好网站SEO优化的第一步就是首先让蜘蛛爬虫经常来你的网站进行光顾,下面的Linux命令可以让你清楚的知道蜘蛛的爬行情况.下面我们针对nginx服务器进行分析,日志文件所在目录:/usr/local/nginx/logs/access.log,access.log这个文件记录的应该是最近一天的日志情况,首先请看看日志大小,如果很大(超过50MB)建议别用这些命令分析,因为这些命令很消耗CPU,或者更新下来放到分析机上执行,以免影响网站的速度. Linux shell命令 1. 百度蜘蛛爬行

  • Linux命令搜索命令whereis与which的区别

    Linux命令搜索命令whereis与which的区别 一 whereis 1.语法 whereis 命令名 搜索命令所在的路径以及帮助文档所在的位置 选项: -b:只查找可执行文件 -m:只查找帮助文件 2.实战 [root@localhost ~]# whereis ls ls:/usr/bin/ls /usr/share/man/man1/ls.1.gz/usr/share/man/man1p/ls.1p.gz [root@localhost ~]# whoami root [root@l

  • Linux中的搜索文件命令

    文件搜索命令locate:搜索快,新建文件无法搜索: 命令格式: locate 文件名  //在后台数据库中按文件名搜索,搜索速度快: /var/lib/mlocate : locate命令所搜索的后台数据库 命令:updatedb // 更新数据库,默认是一天自动更新: /etc/uodatedb.conf 配置文件中: 1.      PRUNE_BIND_MOUNTS = "yes" 开启搜索限制 2.      PRINEFS = 搜索时,不搜索的文件系统: 3.      P

  • Linux上的文件搜索命令实例详解

    locate 基础了解 在centos7上默认没有locate命令,需要先手动安装.安装步骤:http://www.cnblogs.com/feanmy/p/7676717.html locate命令搜索的后台数据库路径:/var/lib/mlocate/mlocate.db ls -hl /var/lib/mlocate total 1.2M -rw-r----- 1 root slocate 1.2M Oct 16 14:36 mlocate.db 更新数据库使用updatedb,配置文件为

  • Linux下动态链接库加载路径及搜索路径问题

    引子 近日,服务器迁移后,偷懒未重新编译nginx的,直接./nginx启动,结果遇到如下问题: "error while loading shared libraries" 这是是因为需要的动态库不在动态链接器ld.so的搜索路径导致. ld.so 动态共享库搜索顺序 1.ELF可执行文件中动态段DT_RPATH指定:gcc加入链接参数"-Wl,-rpath"指定动态库搜索路径: 2.环境变量LD_LIBRARY_PATH指定路径: 3./etc/ld.so.ca

  • linux最快的文本搜索神器ripgrep(grep的最好代替者)

    前言 说到文本搜索工具,大家一定会知道 grep, 它是 linux 最有用并最常用的工具之一. 但如果要再一个大的工程项目中搜索某个关键词,大家也一定知道它比较耗时. 所以就有了很多替代工具,之前最出名的是 Ack,Ag 而最近又有了新的替代者 Ripgrep, 这个工具和 Ack/Ag 一样都使用了多线程的方法,但 rg 比它们更快 简介 ripgrep 是一个以行为单位的搜索工具, 它根据提供的 pattern 递归地在指定的目录里搜索.它是由 Rust 语言写成,相较与同类工具,它的特点

  • 一天一个shell命令 linux文本内容操作系列-grep命令详解

    从这篇开始,是文本内容操作,区别于文本操作. Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. shell,perl,python,一直都是文本操作的专家语言,而我们今后学习的的将是shell的噱头--文本操作.下面提到最常见的一个: grep 这算是文本内容的一个重量级选手,能根据某些规格在上千行的文本文件中查找

  • 如何做一个文本搜索?

    <%head = "搜索"SearchString = Request("SearchString")count=0 Function UnMapPath( Path )    UnMapPath = Replace(Mid(Path, Len(Server.MapPath("/")) + 1), "\", "/") ' 把当前目录的实际路径转换为虚拟路径.End Function Function

  • MongoDB学习之Text Search文本搜索功能

    前言 MongoDB支持对文本内容执行文本搜索操作,其提供了索引text index和查询操作$text来完成文本搜索功能.下面我们通过一个简单的例子来体验一下MongoDB提供的全文检索功能. 方法示例 1.新建blogs collection,并插入如下的document. db.blogs.insert({_id:1,title:"MongoDB text search",content:"this is a simple MongoDB text search int

  • 同文件夹内文本搜索器(vbs)

    <HTML><HEAD><TITLE>同文件夹内文本搜索器(vbs)</TITLE> <META http-equiv=Content-Type content="text/html; charset=gb2312"> <SCRIPT language=vbscript id=clientEventHandlersVBS> <!-- Dim fso, f, f1, fc,fn,s,uf1,ufn Sub B1

  • JavaScript简单实现关键字文本搜索高亮显示功能示例

    本文实例讲述了JavaScript简单实现关键字文本搜索高亮显示功能.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"

  • 文本搜索

    <% Head = "搜索" SearchString = Request("SearchString") count=0 '把当前目录的实际路径转换为虚拟路径 Function UnMapPath( Path ) UnMapPath = Replace(Mid(Path, Len(Server.MapPath("/")) + 1), "\", "/") End Function Function S

  • Linux常见基本命令与用法大全

    本文实例讲述了Linux常见基本命令与用法.分享给大家供大家参考,具体如下: 目标 熟练使用 Linux常用的命令 1> 查看文件信息:ls ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令. Linux文件或者目录名称最长可以有265个字符,"."代表当前目录,"-"代表上一级目录,以"."开头的文件为隐藏文件,需要用 -a 参数才能显示. ls常用参数: 图中列出的信息含义如下图

  • Python常问的100个面试问题汇总(上篇)

    目录 前言 python基础 Q1.什么是Python? Q2.Python的主要功能是什么? Q3.Python中支持的数据类型有哪些? Q4.列表和元组有什么区别? Q5.什么是Python模块? Q6.python解释器种类以及特点? Q7.什么是Python切片? Q8.Python中的%S是什么? Q9.Python编程中的函数是什么? Q10.Python中有多少基本类型的函数可用? Q11.我们如何用Python编写函数? Q12.深拷贝和浅拷贝有什么区别? Q13.Python中

  • Linux中查看文本的小技巧(超实用!)

    前言 日常开发中,我们经常需要在服务器上进行各种文本,日志的查看操作,本文主要对常用的文本,日志查看技巧进行了一番总结和归纳,方便大家收藏起来后续查看使用: tail命令查看日志信息 实时监控日志: tail -f filename 实时监控10行日志信息: tail -10f filename 查看日志尾部的最后100行日志信息: tail -n 100 filename 查看日志100行之后的日志信息: tail -n +100 filename head命令查看文本信息 查看文本开始的头1

随机推荐