mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-01-31 23:30:11 +08:00
commit
c3b0c11a05
@ -0,0 +1,240 @@
|
||||
grep 命令系列:grep 中的正则表达式
|
||||
================================================================================
|
||||
|
||||
在 Linux 、类 Unix 系统中我该如何使用 Grep 命令的正则表达式呢?
|
||||
|
||||
Linux 附带有 GNU grep 命令工具,它支持扩展正则表达式(extended regular expressions),而且 GNU grep 在所有的 Linux 系统中都是默认有的。Grep 命令被用于搜索定位存储在您服务器或工作站上的任何信息。
|
||||
|
||||
### 正则表达式 ###
|
||||
|
||||
正则表达式就是用于匹配每行输入的一种模式,模式是指一串字符序列。下面是范例:
|
||||
|
||||
^w1
|
||||
w1|w2
|
||||
[^ ]
|
||||
|
||||
#### grep 正则表达式示例 ####
|
||||
|
||||
在 /etc/passswd 目录中搜索 'vivek'
|
||||
|
||||
grep vivek /etc/passwd
|
||||
|
||||
输出例子:
|
||||
|
||||
vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
|
||||
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
|
||||
gitevivek:x:1002:1002::/home/gitevivek:/bin/sh
|
||||
|
||||
搜索大小写任意的 vivek(即不区分大小写的搜索)
|
||||
|
||||
grep -i -w vivek /etc/passwd
|
||||
|
||||
搜索大小写任意的 vivek 或 raj
|
||||
|
||||
grep -E -i -w 'vivek|raj' /etc/passwd
|
||||
|
||||
上面最后的例子显示的,就是一个扩展的正则表达式的模式。
|
||||
|
||||
### 锚点 ###
|
||||
|
||||
你可以分别使用 ^ 和 $ 符号来正则匹配输入行的开始或结尾。下面的例子搜索显示仅仅以 vivek 开始的输入行:
|
||||
|
||||
grep ^vivek /etc/passwd
|
||||
|
||||
输出例子:
|
||||
|
||||
vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
|
||||
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
|
||||
|
||||
你可以仅仅只搜索出以单词 vivek 开始的行,即不显示 vivekgit、vivekg 等(LCTT 译注:即该单词后面是空格、符号等英文的单词分隔符。)
|
||||
|
||||
grep -w ^vivek /etc/passwd
|
||||
|
||||
找出以单词 word 结尾的行:
|
||||
|
||||
grep 'foo$' 文件名
|
||||
|
||||
匹配仅仅只包含 foo 的行:
|
||||
|
||||
grep '^foo$' 文件名
|
||||
|
||||
如下所示的例子可以搜索空行:
|
||||
|
||||
grep '^$' 文件名
|
||||
|
||||
### 字符类 ###
|
||||
|
||||
匹配 Vivek 或 vivek:
|
||||
|
||||
grep '[vV]ivek' 文件名
|
||||
|
||||
或者
|
||||
|
||||
grep '[vV][iI][Vv][Ee][kK]' 文件名
|
||||
|
||||
也可以匹配数字 (即匹配 vivek1 或 Vivek2 等等):
|
||||
|
||||
grep -w '[vV]ivek[0-9]' 文件名
|
||||
|
||||
可以匹配两个数字字符(即 foo11、foo12 等):
|
||||
|
||||
grep 'foo[0-9][0-9]' 文件名
|
||||
|
||||
不仅仅局限于数字,也能匹配至少一个字母的:
|
||||
|
||||
grep '[A-Za-z]' 文件名
|
||||
|
||||
显示含有 "w" 或 "n" 字符的所有行:
|
||||
|
||||
grep [wn] 文件名
|
||||
|
||||
放在括号内的表达式,即包在 "[:" 和 ":]" 之间的字符类的名字,它表示的是属于此类的所有字符列表。标准的字符类名称如下:
|
||||
|
||||
- [:alnum:] - 字母数字字符
|
||||
- [:alpha:] - 字母字符
|
||||
- [:blank:] - 空字符: 空格键符 和 制表符
|
||||
- [:digit:] - 数字: '0 1 2 3 4 5 6 7 8 9'
|
||||
- [:lower:] - 小写字母: 'a b c d e f g h i j k l m n o p q r s t u v w x y z'
|
||||
- [:space:] - 空格字符: 制表符、换行符、垂直制表符、换页符、回车符和空格键符
|
||||
- [:upper:] - 大写字母: 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'
|
||||
|
||||
在这个例子所示的是匹配所有大写字母:
|
||||
|
||||
grep '[:upper:]' 文件名
|
||||
|
||||
### 通配符 ###
|
||||
|
||||
你可以使用 "." 来匹配单个字符。例子中匹配以 "b" 开头以 "t" 结尾的3个字符的单词:
|
||||
|
||||
grep '\<b.t\>' 文件名
|
||||
|
||||
在这儿,
|
||||
|
||||
- `\<` 匹配单词前面的空字符串
|
||||
- `\>` 匹配单词后面的空字符串
|
||||
|
||||
打印出只有两个字符的所有行:
|
||||
|
||||
grep '^..$' 文件名
|
||||
|
||||
显示以一个点和一个数字开头的行:
|
||||
|
||||
grep '^\.[0-9]' 文件名
|
||||
|
||||
#### 点字符转义 ####
|
||||
|
||||
下面要匹配到 IP 地址为 192.168.1.254 的正则式是不正确的:(LCTT 译注:可以匹配到该 IP 地址,但是也有可能匹配到间隔符号不是点的类似格式)
|
||||
|
||||
grep '192.168.1.254' /etc/hosts
|
||||
|
||||
三个点字符都需要转义:
|
||||
|
||||
grep '192\.168\.1\.254' /etc/hosts
|
||||
|
||||
下面的例子只能匹配出 IP 地址:(LCTT 译注:实际上由于 IP 地址中数字的取值范围,该正则表达式并不精确)
|
||||
|
||||
egrep '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' 文件名
|
||||
|
||||
### 怎么样搜索以 - 符号开头的匹配模式? ###
|
||||
|
||||
要使用 -e 选项来搜索匹配 '--test--' 字符串,如果不使用 -e 选项,grep 命令会试图把 '--test--' 当作自己的选项参数来解析:
|
||||
|
||||
grep -e '--test--' 文件名
|
||||
|
||||
### 怎么使用 grep 的“或”匹配? ###
|
||||
|
||||
使用如下的语法:
|
||||
|
||||
grep -E 'word1|word2' 文件名
|
||||
或
|
||||
egrep 'word1|word2' 文件名
|
||||
|
||||
或者是
|
||||
|
||||
grep 'word1\|word2' 文件名
|
||||
|
||||
### 怎么使用 grep 的“和”匹配? ###
|
||||
|
||||
使用下面的语法来显示既包含 'word1' 又包含 'word2' 的所有行
|
||||
|
||||
grep 'word1' 文件名 | grep 'word2'
|
||||
|
||||
### 怎么样使用序列检测? ###
|
||||
|
||||
使用如下的语法,您可以检测一个字符在序列中重复出现次数:
|
||||
|
||||
{N}
|
||||
{N,}
|
||||
{min,max}
|
||||
|
||||
要匹配字符 “v" 出现两次:
|
||||
|
||||
egrep "v{2}" 文件名
|
||||
|
||||
下面的命令能匹配到 "col" 和 "cool" :
|
||||
|
||||
egrep 'co{1,2}l' 文件名
|
||||
|
||||
下面的命令将会匹配出至少有三个 'c' 字符的所有行。
|
||||
|
||||
egrep 'c{3,}' 文件名
|
||||
|
||||
下面的例子会匹配 91-1234567890(即二个数字-十个数字) 这种格式的手机号。
|
||||
|
||||
grep "[[:digit:]]\{2\}[ -]\?[[:digit:]]\{10\}" 文件名
|
||||
|
||||
### 怎么样使 grep 命令高亮显示?###
|
||||
|
||||
使用如下的语法:
|
||||
|
||||
grep --color 正则表达式 文件名
|
||||
|
||||
### 怎么样仅仅只显示匹配出的字符,而不是匹配出的行? ###
|
||||
|
||||
使用如下语法:
|
||||
|
||||
grep -o 正则表达式 文件名
|
||||
|
||||
### 正则表达式限定符###
|
||||
|
||||
| 限定符 | 描述|
|
||||
|------|----|
|
||||
|`.`|匹配任意的一个字符。|
|
||||
|`?`|匹配前面的子表达式,最多一次。|
|
||||
|`*`|匹配前面的子表达式零次或多次。|
|
||||
|`+`|匹配前面的子表达式一次或多次。|
|
||||
|`{N}`|匹配前面的子表达式 N 次。|
|
||||
|`{N,}`|匹配前面的子表达式 N 次到多次。|
|
||||
|`{N,M}`|匹配前面的子表达式 N 到 M 次,至少 N 次至多 M 次。|
|
||||
|`-`|只要不是在序列开始、结尾或者序列的结束点上,表示序列范围。|
|
||||
|`^`|匹配一行开始的空字符串;也表示字符不在要匹配的列表中。|
|
||||
|`$`|匹配一行末尾的空字符串。|
|
||||
|`\b`|匹配一个单词前后的空字符串。|
|
||||
|`\B`|匹配一个单词中间的空字符串。|
|
||||
|`\<`|匹配单词前面的空字符串。|
|
||||
|`\>`|匹配单词后面的空字符串。|
|
||||
|
||||
#### grep 和 egrep ####
|
||||
|
||||
egrep 等同于 **grep -E** 。它会以扩展的正则表达式的模式来解释模式。下面来自 grep 的帮助页:
|
||||
|
||||
基本的正则表达式元字符 ?、+、 {、 |、 ( 和 ) 已经失去了它们原来的意义,要使用的话用反斜线的版本 \?、\+、\{、\|、\( 和 \) 来代替。
|
||||
传统的 egrep 并不支持 { 元字符,一些 egrep 的实现是以 \{ 替代的,所以一个可移植的脚本应该避免在 grep -E 使用 { 符号,要匹配字面的 { 应该使用 [}]。
|
||||
GNU grep -E 试图支持传统的用法,如果 { 出在在无效的间隔规范字符串这前,它就会假定 { 不是特殊字符。
|
||||
例如,grep -E '{1' 命令搜索包含 {1 两个字符的串,而不会报出正则表达式语法错误。
|
||||
POSIX.2 标准允许这种操作的扩展,但在可移植脚本文件里应该避免这样使用。
|
||||
|
||||
参考:
|
||||
|
||||
- grep 和 regex 帮助手册页(7)
|
||||
- grep 的 info 页
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.cyberciti.biz/faq/grep-regular-expressions/
|
||||
|
||||
作者:Vivek Gite
|
||||
译者:[runningwater](https://github.com/runningwater)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
@ -1,89 +0,0 @@
|
||||
translating by wwy-hust
|
||||
|
||||
Cinnamon 2.8 Review
|
||||
================================================================================
|
||||
![](https://www.maketecheasier.com/assets/uploads/2015/11/cinnamon-2-8-featured.jpg)
|
||||
|
||||
Other than Gnome and KDE, Cinnamon is another desktop environment that is used by many people. It is made by the same team that produces Linux Mint (and ships with Linux Mint) and can also be installed on several other distributions. The latest version of this DE – Cinnamon 2.8 – was released earlier this month, and it brings a host of bug fixes and improvements as well as some new features.
|
||||
|
||||
I’m going to go over the major improvements made in this release as well as how to update to Cinnamon 2.8 or install it for the first time.
|
||||
|
||||
### Improvements to Applets ###
|
||||
|
||||
There are several improvements to already existing applets for the panel.
|
||||
|
||||
#### Sound Applet ####
|
||||
|
||||
![cinnamon-28-sound-applet](https://www.maketecheasier.com/assets/uploads/2015/11/rsz_cinnamon-28-sound-applet.jpg)
|
||||
|
||||
The Sound applet was revamped and now displays track information as well as the media controls on top of the cover art of the audio file. For music players with seeking support (such as Banshee), a progress bar will be displayed in the same region which you can use to change the position of the audio track. Right-clicking on the applet in the panel will display the options to mute input and output devices.
|
||||
|
||||
#### Power Applet ####
|
||||
|
||||
The Power applet now displays the status of each of the connected batteries and devices using the manufacturer’s data instead of generic names.
|
||||
|
||||
#### Window Thumbnails ####
|
||||
|
||||
![cinnamon-2.8-window-thumbnails](https://www.maketecheasier.com/assets/uploads/2015/11/cinnamon-2.8-window-thumbnails.png)
|
||||
|
||||
Cinnamon 2.8 brings the option to show window thumbnails when hovering over the window list in the panel. You can turn it off if you don’t like it, though.
|
||||
|
||||
#### Workspace Switcher Applet ####
|
||||
|
||||
![cinnamon-2.8-workspace-switcher](https://www.maketecheasier.com/assets/uploads/2015/11/cinnamon-2.8-workspace-switcher.png)
|
||||
|
||||
Adding the Workspace switcher applet to your panel will show you a visual representation of your workspaces with little rectangles embedded inside to show the position of your windows.
|
||||
|
||||
#### System Tray ####
|
||||
|
||||
Cinnamon 2.8 brings support for app indicators in the system tray. You can easily disable this in the settings which will force affected apps to fall back to using status icons instead.
|
||||
|
||||
### Visual Improvements ###
|
||||
|
||||
A host of visual improvements were made in Cinnamon 2.8. The classic and preview Alt + Tab switchers were polished with noticeable improvements, while the Alt + F2 dialog received bug fixes and better auto completion for commands.
|
||||
|
||||
Also, the issue with the traditional animation effect for minimizing windows is now sorted and works with multiple panels.
|
||||
|
||||
### Nemo Improvements ###
|
||||
|
||||
![cinnamon-2.8-nemo](https://www.maketecheasier.com/assets/uploads/2015/11/rsz_cinnamon-28-nemo.jpg)
|
||||
|
||||
The default file manager for Cinnamon also received several bug fixes and has a new “Quick-rename” feature for renaming files and directories. This works by clicking the file or directory twice with a short pause in between to rename the files.
|
||||
|
||||
Nemo also detects issues with thumbnails automatically and prompts you to quickly fix them.
|
||||
|
||||
### Other Notable improvements ###
|
||||
|
||||
- Applets now reload themselves automatically once they are updated.
|
||||
- Support for multiple monitors was improved significantly.
|
||||
- Dialog windows have been improved and now attach themselves to their parent windows.
|
||||
- HiDPI dectection has been improved.
|
||||
- QT5 applications now look more native and use the default GTK theme.
|
||||
- Window management and rendering performance has been improved.
|
||||
- There are various bugfixes.
|
||||
|
||||
### How to Get Cinnamon 2.8 ###
|
||||
|
||||
If you’re running Linux Mint you will get Cinnamon 2.8 as part of the upgrade to Linux Mint 17.3 “Rosa” Cinnamon Edition. The BETA release is already out, so you can grab that if you’d like to get your hands on the new software immediately.
|
||||
|
||||
For Arch users, Cinnamon 2.8 is already in the official Arch repositories, so you can just update your packages and do a system-wide upgrade to get the latest version.
|
||||
|
||||
Finally, for Ubuntu users, you can install or upgrade to Cinnamon 2.8 by running in turn the following commands:
|
||||
|
||||
sudo add-apt-repository -y ppa:moorkai/cinnamon
|
||||
sudo apt-get update
|
||||
sudo apt-get install cinnamon
|
||||
|
||||
Have you tried Cinnamon 2.8? What do you think of it?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.maketecheasier.com/cinnamon-2-8-review/
|
||||
|
||||
作者:[Ayo Isaiah][a]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.maketecheasier.com/author/ayoisaiah/
|
87
translated/talk/20151201 Cinnamon 2.8 Review.md
Normal file
87
translated/talk/20151201 Cinnamon 2.8 Review.md
Normal file
@ -0,0 +1,87 @@
|
||||
Cinnamon 2.8 评论
|
||||
================================================================================
|
||||
![](https://www.maketecheasier.com/assets/uploads/2015/11/cinnamon-2-8-featured.jpg)
|
||||
|
||||
除了Gnome和KDE外,Cinnamon是另一个很多人使用的桌面环境。它是由创作Linux Mint的团队制作的,并且可以被安装在许多其他发行版上。该桌面环境的最新版本 - Cinnamon 2.8 - 于本月早些时间发布,此版本修复了许多的Bug、做了许多改进并添加了一些新功能。
|
||||
|
||||
我将仔细介绍该发行版本的主要改进,以及如何更新到Cinnamon 2.8或者第一次安装它。
|
||||
|
||||
### 对Applets的改进 ###
|
||||
|
||||
在此版本中,对已经在面板中存在的Applets做了若干的改进。
|
||||
|
||||
#### 声音 Applet ####
|
||||
|
||||
![cinnamon-28-sound-applet](https://www.maketecheasier.com/assets/uploads/2015/11/rsz_cinnamon-28-sound-applet.jpg)
|
||||
|
||||
声音Applet经过修订,目前可以显示音轨信息并且可以在音频文件的艺术家封面上面进行媒体控制。对于支持拖动的音乐播放器来说(例如Banshee),会有一个进度条在同样的位置,您可以用它来改变音轨位置。在applet的面板上右击将显示对输入和输出静音的选项。
|
||||
|
||||
#### 电源 Applet ####
|
||||
|
||||
电源applet则会使用制造商的数据而不是通用名称显示每一个连接的电池和设备。
|
||||
|
||||
#### 窗口缩略图 ####
|
||||
|
||||
![cinnamon-2.8-window-thumbnails](https://www.maketecheasier.com/assets/uploads/2015/11/cinnamon-2.8-window-thumbnails.png)
|
||||
|
||||
Cinnamon 2.8带来了可以在鼠标悬停于面板里窗口列表中的窗口时展示窗口缩略图的选项。如果您不喜欢该功能,您还可以关闭它。
|
||||
|
||||
#### 工作区切换 Applet ####
|
||||
|
||||
![cinnamon-2.8-workspace-switcher](https://www.maketecheasier.com/assets/uploads/2015/11/cinnamon-2.8-workspace-switcher.png)
|
||||
|
||||
添加工作区切换applet到您的面板将为您显示一个代表工作区的可视化的图像,一些矩形嵌套在其中,代表您的窗口的位置。
|
||||
|
||||
#### 系统托盘 ####
|
||||
|
||||
Cinnamon 2.8带来了对系统托盘中的应用程序指示器的支持。您可以很容易地在设置中禁用它,这将强制应用程序回滚以使用状态图标作为替代。
|
||||
|
||||
### 视觉改进 ###
|
||||
|
||||
Cinnamon 2.8还做了很多视觉上的改进。经典的切换器和Alt + Tab预览切换器都被细细打磨,有了显著的改进,同时修复了Alt + F2对话框的bug,并赋予了它更好的命令自动补全功能。
|
||||
|
||||
而且,在于最小化窗口时的存在的传统的动画效果中的问题现已被解决并可用于多个面板。
|
||||
|
||||
### Nemo 的改进 ###
|
||||
|
||||
![cinnamon-2.8-nemo](https://www.maketecheasier.com/assets/uploads/2015/11/rsz_cinnamon-28-nemo.jpg)
|
||||
|
||||
Cinnamon默认的文件管理器也修复了一些bug,并有了新的“快速重命名”的功能,用于重命名文件和文件夹。可以通过两次点击文件或文件夹并在两次点击之前进行简短的停顿以重命名文件。
|
||||
|
||||
Nemo也会自动地检测缩略图存在的问题,并提示您快速地修复它们。
|
||||
|
||||
### 其他值得注意的改进 ###
|
||||
|
||||
- Applets如今会在它们被更新的时候自动地重新加载一次。
|
||||
- 对于多个监视器的支持有了显著的提高。
|
||||
- 对话框窗口有了提高,并且会附加到它的父窗口上。
|
||||
- HiDPI检测有了改进。
|
||||
- QT5应用程序现在看起来更加原生并使用了默认的GTK主题。
|
||||
- 窗口管理和渲染性能有了提升。
|
||||
- 修复了许多bug。
|
||||
|
||||
### 如何获得 Cinnamon 2.8 ###
|
||||
|
||||
如果您在运行Linux Mint,您会在更新Linux Mint 17.3 “Rosa”Cinnamon版本的时候获得Cinnamon 2.8的更新。BETA版本现在已经放出,因此,如果您想立刻尝试新的软件,您可以试试。
|
||||
|
||||
对于Arch的用户来说,Cinnamon 2.8已经在Arch的官方仓库了,您可以通过更新软件包和系统级的更新获得Cinnamon的最新版本。
|
||||
|
||||
最后,对于Ubuntu用户来说,您可以通过下面的命令安装或更新Cinnamon 2.8:
|
||||
|
||||
sudo add-apt-repository -y ppa:moorkai/cinnamon
|
||||
sudo apt-get update
|
||||
sudo apt-get install cinnamon
|
||||
|
||||
您已经尝试了Cinnamon 2.8了么?感觉如何呢?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.maketecheasier.com/cinnamon-2-8-review/
|
||||
|
||||
作者:[Ayo Isaiah][a]
|
||||
译者:[wwy-hust](https://github.com/wwy-hust)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.maketecheasier.com/author/ayoisaiah/
|
@ -1,288 +0,0 @@
|
||||
## grep 中的正则表达式
|
||||
================================================================================
|
||||
在 Linux 、类 Unix 系统中我该如何使用 Grep 命令的正则表达式呢?
|
||||
|
||||
Linux 附带有 GNU grep 命令工具,它支持正则表达式,而且 GNU grep 在所有的 Linux 系统中都是默认有的。Grep 命令被用于搜索定位存储在您服务器或工作站的信息。
|
||||
|
||||
### 正则表达式 ###
|
||||
|
||||
正则表达式仅仅是对每个输入行的匹配的一种模式,即对字符序列的匹配模式。下面是范例:
|
||||
|
||||
^w1
|
||||
w1|w2
|
||||
[^ ]
|
||||
|
||||
#### grep 正则表达式示例 ####
|
||||
|
||||
在 /etc/passswd 目录中搜索 'vivek'
|
||||
|
||||
grep vivek /etc/passwd
|
||||
|
||||
输出例子:
|
||||
|
||||
vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
|
||||
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
|
||||
gitevivek:x:1002:1002::/home/gitevivek:/bin/sh
|
||||
|
||||
摸索任何情况下的 vivek(即不区分大小写的搜索)
|
||||
|
||||
grep -i -w vivek /etc/passwd
|
||||
|
||||
摸索任何情况下的 vivek 或 raj
|
||||
|
||||
grep -E -i -w 'vivek|raj' /etc/passwd
|
||||
|
||||
上面最后的例子显示的,就是一个正则表达式扩展的模式。
|
||||
|
||||
### 锚 ###
|
||||
|
||||
你可以分别使用 ^ 和 $ 符号来正则匹配输入行的开始或结尾。下面的例子搜索显示仅仅以 vivek 开始的输入行:
|
||||
|
||||
grep ^vivek /etc/passwd
|
||||
|
||||
输出例子:
|
||||
|
||||
vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
|
||||
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
|
||||
|
||||
你可以仅仅只搜索出以单词 vivek 开始的行,即不显示 vivekgit、vivekg 等
|
||||
|
||||
grep -w ^vivek /etc/passwd
|
||||
|
||||
找出以单词 word 结尾的行:
|
||||
|
||||
grep 'foo$' 文件名
|
||||
|
||||
匹配仅仅只包含 foo 的行:
|
||||
|
||||
grep '^foo$' 文件名
|
||||
|
||||
如下所示的例子可以搜索空行:
|
||||
|
||||
grep '^$' 文件名
|
||||
|
||||
### 字符类 ###
|
||||
|
||||
匹配 Vivek 或 vivek:
|
||||
|
||||
grep '[vV]ivek' 文件名
|
||||
|
||||
或者
|
||||
|
||||
grep '[vV][iI][Vv][Ee][kK]' 文件名
|
||||
|
||||
也可以匹配数字 (即匹配 vivek1 或 Vivek2 等等):
|
||||
|
||||
grep -w '[vV]ivek[0-9]' 文件名
|
||||
|
||||
可以匹配两个数字字符(即 foo11、foo12 等):
|
||||
|
||||
grep 'foo[0-9][0-9]' 文件名
|
||||
|
||||
不仅仅局限于数字,也能匹配至少一个字母的:
|
||||
|
||||
grep '[A-Za-z]' 文件名
|
||||
|
||||
显示含有"w" 或 "n" 字符的所有行:
|
||||
|
||||
grep [wn] 文件名
|
||||
|
||||
在括号内的表达式,即包在"[:" 和 ":]" 之间的字符类的名字,它表示的是属于此类的所有字符列表。标准的字符类名称如下:
|
||||
|
||||
- [:alnum:] - 字母数字字符.
|
||||
- [:alpha:] - 字母字符
|
||||
- [:blank:] - 空字符: 空格键符 和 制表符.
|
||||
- [:digit:] - 数字: '0 1 2 3 4 5 6 7 8 9'.
|
||||
- [:lower:] - 小写字母: 'a b c d e f g h i j k l m n o p q r s t u v w x y z'.
|
||||
- [:space:] - 空格字符: 制表符、换行符、垂直制表符、换页符、回车符和空格键符.
|
||||
- [:upper:] - 大写字母: 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'.
|
||||
|
||||
例子所示的是匹配所有大写字母:
|
||||
|
||||
grep '[:upper:]' 文件名
|
||||
|
||||
### 通配符 ###
|
||||
|
||||
你可以使用 "." 来匹配单个字符。例子中匹配以"b"开头以"t"结尾的3个字符的单词:
|
||||
|
||||
grep '\<b.t\>' 文件名
|
||||
|
||||
在这儿,
|
||||
|
||||
- \< 匹配单词前面的空字符串
|
||||
- \> 匹配单词后面的空字符串
|
||||
|
||||
打印出只有两个字符的所有行:
|
||||
|
||||
grep '^..$' 文件名
|
||||
|
||||
显示以一个点和一个数字开头的行:
|
||||
|
||||
grep '^\.[0-9]' 文件名
|
||||
|
||||
#### 点号转义 ####
|
||||
|
||||
下面要匹配到 IP 地址为 192.168.1.254 的正则式是不会工作的:
|
||||
|
||||
egrep '192.168.1.254' /etc/hosts
|
||||
|
||||
三个点符号都需要转义:
|
||||
|
||||
grep '192\.168\.1\.254' /etc/hosts
|
||||
|
||||
下面的例子仅仅匹配出 IP 地址:
|
||||
|
||||
egrep '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' 文件名
|
||||
|
||||
下面的例子会匹配任意大小写的 Linux 或 UNIX 这两个单词:
|
||||
|
||||
egrep -i '^(linux|unix)' 文件名
|
||||
|
||||
### 怎么样搜索以 - 符号开头的匹配模式? ###
|
||||
|
||||
要使用 -e 选项来搜索匹配 '--test--' 字符串,如果不使用 -e 选项,grep 命令会试图把 '--test--' 当作自己的选项参数来解析:
|
||||
|
||||
grep -e '--test--' 文件名
|
||||
|
||||
### 怎么使用 grep 的 OR 匹配? ###
|
||||
|
||||
使用如下的语法:
|
||||
|
||||
grep 'word1|word2' 文件名
|
||||
|
||||
或者是
|
||||
|
||||
grep 'word1\|word2' 文件名
|
||||
|
||||
### 怎么使用 grep 的 AND 匹配? ###
|
||||
|
||||
使用下面的语法来显示既包含 'word1' 又包含 'word2' 的所有行
|
||||
|
||||
grep 'word1' 文件名 | grep 'word2'
|
||||
|
||||
### 怎么样使用序列检测? ###
|
||||
|
||||
使用如下的语法,您可以检测一个字符在序列中重复出现次数:
|
||||
|
||||
{N}
|
||||
{N,}
|
||||
{min,max}
|
||||
|
||||
要匹配字符 “v" 出现两次:
|
||||
|
||||
egrep "v{2}" 文件名
|
||||
|
||||
下面的命令能匹配到 "col" 和 "cool" :
|
||||
|
||||
egrep 'co{1,2}l' 文件名
|
||||
|
||||
下面的命令将会匹配出至少有三个 'c' 字符的所有行。
|
||||
|
||||
egrep 'c{3,}' 文件名
|
||||
|
||||
下面的例子会匹配 91-1234567890(即二个数字-十个数字) 这种格式的手机号。
|
||||
|
||||
grep "[[:digit:]]\{2\}[ -]\?[[:digit:]]\{10\}" 文件名
|
||||
|
||||
### 怎么样使 grep 命令突出显示?###
|
||||
|
||||
使用如下的语法:
|
||||
|
||||
grep --color regex 文件名
|
||||
|
||||
### 怎么样仅仅只显示匹配出的字符,而不是匹配出的行? ###
|
||||
|
||||
使用如下语法:
|
||||
|
||||
grep -o regex 文件名
|
||||
|
||||
### 正则表达式限定符###
|
||||
|
||||
注:表格
|
||||
<table border=1>
|
||||
<tr>
|
||||
<th>限定符</th>
|
||||
<th>描述</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>.</td>
|
||||
<td>匹配任意的一个字符.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>?</td>
|
||||
<td>匹配前面的子表达式,最多一次。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>*</td>
|
||||
<td>匹配前面的子表达式零次或多次。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>+</td>
|
||||
<td>匹配前面的子表达式一次或多次。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{N}</td>
|
||||
<td>匹配前面的子表达式 N 次。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{N,}</td>
|
||||
<td>匹配前面的子表达式 N 次到多次。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{N,M}</td>
|
||||
<td>匹配前面的子表达式 N 到 M 次,至少 N 次至多 M 次。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>-</td>
|
||||
<td>只要不是在序列开始、结尾或者序列的结束点上,表示序列范围</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>^</td>
|
||||
<td>匹配一行开始的空字符串;也表示字符不在要匹配的列表中。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>$</td>
|
||||
<td>匹配一行末尾的空字符串。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>\b</td>
|
||||
<td>匹配一个单词前后的空字符串。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>\B</td>
|
||||
<td>匹配一个单词中间的空字符串</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>\<</td>
|
||||
<td>匹配单词前面的空字符串。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>\></td>
|
||||
<td> 匹配单词后面的空字符串。</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
#### grep 和 egrep ####
|
||||
|
||||
egrep 跟 **grep -E** 是一样的。他会以正则表达式的模式来解释。下面是 grep 的帮助页(man):
|
||||
|
||||
基本的正则表达式元字符 ?、+、 {、 |、 ( 和 ) 已经失去了他们特殊的意义,要使用的话用反斜线的版本 \?、\+、\{、\|、\( 和 \) 来代替。
|
||||
传统的 egrep 不支持 { 元字符,一些 egrep 的实现是以 \{ 替代的,所以有 grep -E 的通用脚本应该避免使用 { 符号,要匹配字面的 { 应该使用 [}]。
|
||||
GNU grep -E 试图支持传统的用法,如果 { 出在在无效的间隔规范字符串这前,它就会假定 { 不是特殊字符。
|
||||
例如,grep -E '{1' 命令搜索包含 {1 两个字符的串,而不会报出正则表达式语法错误。
|
||||
POSIX.2 标准允许对这种操作的扩展,但在可移植脚本文件里应该避免这样使用。
|
||||
|
||||
引用:
|
||||
|
||||
- grep 和 regex 帮助手册页(7)
|
||||
- grep 的 info 页`
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://www.cyberciti.biz/faq/grep-regular-expressions/
|
||||
|
||||
作者:Vivek Gite
|
||||
译者:[runningwater](https://github.com/runningwater)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
Loading…
Reference in New Issue
Block a user